mySQL-多个左连接需要调整以适应特殊的null出现

mySQL-多个左连接需要调整以适应特殊的null出现,mysql,Mysql,如果子类别id为空,我还尝试选择报告id和报告名称 示例数据: table research_category category_id | category name --------------------------- 1 | category_one 2 | category_two 3 | category_three table research_sub_category sub_category_id | categ

如果子类别id为空,我还尝试选择报告id和报告名称

示例数据:

table research_category

category_id | category name
---------------------------
1           | category_one
2           | category_two
3           | category_three


table research_sub_category

sub_category_id | category_id | sub_category name
-------------------------------------------------
1               | 1           | sub_category_one
2               | 3           | sub_category_two


table research_report_detail

category_id | sub_category_id | report_id | report_name
-----------------------------------------------------------------------------
1           | 1               | 1         | Awesome Report
2           | NULL            | 2         | Awesome? We'll Never Know, Report
3           | 2               | 3         | Another Boring Report, yo
下面的查询返回我想要的结构,但我似乎无法返回子类别id为空的案例的报告id |报告名称。

SELECT c.category_id, c.category_name, s.sub_category_id, s.sub_category_name, r.report_id, r.report_name
FROM research_category AS c
LEFT JOIN research_sub_category AS s
ON c.category_id = s.category_id
LEFT JOIN research_report_detail AS r
ON s.sub_category_id = r.sub_category_id
LEFT JOIN research_report_detail AS r2
ON c.category_id = r2.category_id
AND r2.sub_category_id IS NULL
返回的数据:

category_id|category_name |sub_category_id|sub_category_name|report_id|report_name
-------------------------------------------------------------------------------------
1          |category_one  |1              |sub_category_one |1        |Awesome report
2          |category_two  |NULL           |NULL             |NULL     |NULL
3          |category_three|2              |sub_category_two |3        |Boring Report
我做错了什么

编辑:更改了以下内容

AND r2.sub_category_id = NULL

但是得到了同样的结果

**双重编辑:在数据中添加另一个报告以使问题更清楚

尝试使用“is null”我认为问题在于您试图使用等号(=)。Null不存在,因此无法检查它是否等于某个值

查看此链接

尝试使用“is null”我认为问题在于您试图使用等号(=)。Null不存在,因此无法检查它是否等于某个值

查看此链接

更改

SELECT c.category_id, ... r.report_id, r.report_name

改变


此查询应与更新的问题相匹配: 不要使用两个研究报告详细信息的实例,而应该只使用一个, 具有一个连接条件,该条件将其连接到研究子类当且仅当 子类别id已给定(不为空)


此查询应与更新的问题相匹配: 不要使用两个研究报告详细信息的实例,而应该只使用一个, 具有一个连接条件,该条件将其连接到研究子类当且仅当 子类别id已给定(不为空)


似乎很有希望,但得到了相同的结果:(很抱歉,我忘记在我的原始问题中显示sub_category=>category关联。请参阅编辑的问题…似乎很有希望,但得到了相同的结果:(非常抱歉,我忘记在我的原始问题中显示sub_category=>类别关联。请参见编辑的问题…似乎很有希望,但得到了相同的结果:(似乎很有希望,但得到了相同的结果:(这将选择我想要的所有报告,但是,我还需要不包含报告记录的结果。很抱歉,我忘记在原始问题中显示sub_category=>category关联。请参阅编辑的问题…sub_category_id是否唯一标识子类别,或者相同的sub_category_id是否可以出现在不同的类别中我在此提名Terje D.为“2012年11月27日地球风云人物”-谢谢!!!!!!!!!!!!!!!!!!!!!!!!!!!!!这将选择我想要的所有报告,但是,我还需要不包含报告记录的结果。非常抱歉,我忘记在原始问题中显示sub_category=>category关联。请参见编辑的问题…子类别是否由sub_category_id唯一标识,或者可以是同一sub_category_id出现在不同的类别?我在此提名Terje D.为“今日人物-2012年11月27日-地球”-谢谢!!!!!!!!!!!!!!!!!!!!!
SELECT c.category_id, ... r.report_id, r.report_name
SELECT c.category_id, ... r2.report_id, r2.report_name
SELECT c.category_id, c.category_name,
       s.sub_category_id, s.sub_category_name,
       r.report_id, r.report_name
FROM research_category AS c
LEFT JOIN research_sub_category AS s
ON s.category_id = c.category_id
LEFT JOIN research_report_detail AS r
ON r.category_id = c.category_id
AND (r.sub_category_id = s.sub_category_id OR r.sub_category_id IS NULL)