簡體   English   中英

相同表的左外連接(自連接;不是第一個表)不返回空值

[英]Left Outer Join of Same Table (self-join; not first table) Not Returning Null Values

我自己的表(也不是第一個表)(同樣是自聯接)上的LEFT OUTER JOIN子句也不返回空值,這使我的SELECT語句產生了偏差。 查詢被寫入(表名無關緊要):

Select
SUM(CASE WHEN table2.date =‘day’ and table4.columnX =‘5’ then table3.value1 END),
SUM(CASE WHEN table2.date=’day’ and table4.columnX IS NULL then table3.value2 END)
FROM table1
INNER JOIN table2 on ...
INNER JOIN table3 on ...
LEFT OUTER JOIN table4 on table4.columnX=’5’

其中第一個SUM(CASE WHEN)語句使用table4.columnX中的一個值-當它等於'5'時-第二個SUM(CASE WHEN)語句使用所有其他值-每當它不等於'5時'。

就目前而言,查詢僅返回table4.columnX ='5'的結果,而不返回table4.columnX等於其他所有結果的結果。 這樣,看來LEFT OUTER JOIN沒有返回table4.columnX <>'5'的所有空值。 我認為這可能是因為聯接的書寫不正確。 需要注意的是,table4中沒有可與其他表中的字段連接的字段,因此它必須是某種自連接(我相信)。 感謝您的幫助-謝謝!

LEFT OUTER JOIN將要做的是取走“左表”中的所有行,並有條件地LEFT OUTER JOIN “右表”中的行。 如果對於“左表”中的特定行,“右表”中沒有匹配的行,則聯接行的“右數據值”將為NULL。

但是,您的聯接條件很奇怪,因為它沒有引用另一個表。 如果這確實是您想要的,則應將其更改為CROSS JOIN:

舊: LEFT OUTER JOIN table4 on table4.columnX='5'
新增內容: CROSS JOIN table4 on table4.columnX='5'

這會將table4columnX = 5的所有行連接到上述先前查詢中的每一行。 不知道這就是您要找的東西嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM