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

时间:2018-01-17 21:34:05

标签: sql teradata

我在表(不是第一个表)上的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中没有可以连接到其他表中的字段的字段,因此它必须是某种类型的自连接(我相信)。感谢帮助 - 谢谢!

1 个答案:

答案 0 :(得分:0)

LEFT OUTER JOIN将做的是从"左表"中取出所有行。并有条件地连接"右表"中的行。如果对于"左表"中的特定行,"右表"中没有匹配的行,那么您的"右数据值"对于连接的行将为NULL。

但是,你的连接条件很奇怪,因为它没有引用另一个表。如果这真的是你想要的,那么你应该把它改成CROSS JOIN:

旧:LEFT OUTER JOIN table4 on table4.columnX=’5’
新:CROSS JOIN table4 on table4.columnX=’5’

这会将table4columnX = 5的所有行合并到上一个查询中的每一行。不确定这是否是您正在寻找的......