![](/img/trans.png)
[英]ActiveRecord : LEFT OUTER self-JOIN with conditions on joined table
[英]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'
這會將table4
中columnX
= 5的所有行連接到上述先前查詢中的每一行。 不知道這就是您要找的東西嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.