id不存在的join表

lskq00tm  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(270)

这个问题在这里已经有答案了

仅当值不存在时返回行(2个答案)
9个月前关门了。
我想做一个select,从一个表中获取数据,并连接一个表中的信息,其中来自demographic\u data的d.demographic\u category\u id不存在于demographic\u category列c.demographic\u category\u id中
所以是这样的:

SELECT *
      FROM demographic_data d
      INNER JOIN demographic_info i
      ON d.demographic_info_id = i.demographic_info_id
      AND i.student_id = 1
      LEFT JOIN demographic_category c
      ON d.demographic_category_id
      NOT IN ( select c.demographic_category_id from demographic_category c);

我想做的是得到人口统计数据,这是正确的做这个声明。

SELECT *
      FROM demographic_data d
      INNER JOIN demographic_info i
      ON d.demographic_info_id = i.demographic_info_id
      AND i.student_id = 1

但是,然后从demographic\u category中获取数据,其中demographic\u data.demographic\u category\u id不存在于demographic\u category中,因此从上述段落的查询中获取id中不存在的类别。

shyt4zoc

shyt4zoc1#

你可以使用 WHERE 条款。我建议你 NOT EXISTS :

SELECT *
  FROM demographic_data d JOIN
       demographic_info i
       ON d.demographic_info_id = i.demographic_info_id AND
          i.student_id = 1
  WHERE NOT EXISTS (SELECT 1
                    FROM demographic_category c
                    WHERE d.demographic_category_id = c.demographic_category_id
                   );

我觉得很奇怪,你会有一列不匹配,然而。如果定义了外键关系,则所有值(除了 NULL 当然)会匹配。
编辑:
根据你的评论,你似乎只是想 LEFT JOIN :

SELECT *
  FROM demographic_data d JOIN
       demographic_info i
       ON d.demographic_info_id = i.demographic_info_id AND
          i.student_id = 1 LEFT JOIN
       demographic_category c
       ON d.demographic_category_id = c.demographic_category_id;

相关问题