【发布时间】:2018-06-26 21:07:09
【问题描述】:
我在一个表(不是第一个表)上的 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 中没有可以连接到其他表中的字段的字段,因此它必须是某种自连接(我相信)。非常感谢您的帮助 - 谢谢!
【问题讨论】:
-
您对 table4 的左连接不是自连接也不是正确连接
-
这不是自联接。自联接是指表对自身使用联接。我不知道 Teradata,但在 T-SQL 中你会想要一个交叉连接,这听起来像。
-
当
table2.date = 'day'时,您似乎总是在table4中有匹配项。