0

sub_category_idがNULLの場合、report_idとreport_nameも選択しようとしています。

データ例:

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

以下のクエリは必要な構造を返しますが、report_id|を返すことができないようです。sub_category_idがNULLの場合の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 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

AND r2.sub_category_id IS NULL

しかし、同じ結果が得られました...

**二重編集:質問をより明確にするために、データに別のレポートを追加しました

4

3 に答える 3

1

「isnull」を使用してみてください問題は、等号(=)を使用しようとしていることだと思います。Nullは存在しないため、値と等しいかどうかを確認することはできません。

このリンクをチェックしてくださいhttp://www.w3schools.com/sql/sql_null_values.asp

于 2012-11-27T18:41:08.333 に答える
1

変化する

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

SELECT c.category_id, ... r2.report_id, r2.report_name
于 2012-11-27T18:42:26.873 に答える
1

このクエリは、更新された質問と一致する必要があります。research_report_detailの2つのインスタンスを使用する代わりに、sub_category_idが指定されている場合(nullではない)にのみresearch_sub_categoryに結合する結合条件で1つだけを使用する必要があります。

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)
于 2012-11-27T19:06:35.650 に答える