mySQL-多个左连接需要调整以适应特殊的null出现
如果子类别id为空,我还尝试选择报告id和报告名称 示例数据: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
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)