首页 > 解决方案 > LEFT JOIN 显示 NULL 行 + WHERE

问题描述

我有两张表,一张包含唯一名称(bill_datatypes),另一张表示这些名称连接到某些子类别(一个名称也可以连接到更多类别)。

第一张表(相关部分):
第一张表(相关部分)

第二张表(相关部分):
第二张表(相关部分)

我想选择所有尚未连接到特定子类别的名称。这意味着名称可能在连接表中被提及,但连接到不同的子类别。

我已经用以下子查询解决了这个问题:

SELECT T1.name
FROM bill_datatype T1
WHERE NOT EXISTS (

SELECT T2.bill_datatype_id
FROM obligatory_field T2
WHERE T2.bill_datatype_id = T1.id AND T2.bill_sub_category_id = 1

)

这个解决方案似乎运作良好,但这样我就不能从第二个表中获得任何数据,这在未来可能需要。

您对如何使用 LEFT JOIN 解决问题有什么建议吗?(子类别上的 WHERE 子句对我来说太具有挑战性了。)

也提前感谢您的帮助!

标签: mysqljoinsubqueryleft-join

解决方案


根据我对您问题的理解,我认为此查询将实现您想要的:

SELECT T1.name
FROM bill_datatype T1
LEFT JOIN obligatory_field T2
ON T2.bill_datatype_id = T1.id AND T2.bill_sub_category_id = 1
WHERE T2.bill_datatype_id IS NULL

表中的WHERE条件JOIN'ed只会为您T1提供没有bill_sub_category_id或它们bill_sub_category_id不是 1 的名称。

SQLFiddle


推荐阅读