Redshift左外部联接省略了空值

Elm*_*Elm 3 sql left-join amazon-redshift

作为背景,我设置了100个redshift查询,比这复杂得多,但是我想我肯定缺少一些简单的东西。

我正在做表1和表2之间的左外部联接。这些表本质上是这样的:

Table1
Col1  Col2 Col3
A     C    E
A     D    F

Table2
Col 1 Col2 Col3
A     C    Z
Run Code Online (Sandbox Code Playgroud)

我没有where陈述。我的on声明是:

on Table1.Col1 = Table2.Col1 and Table1.Col2 = Table2.Col2
Run Code Online (Sandbox Code Playgroud)

我的结果表是:

ResultTable:
Col1 Col2 Col3 Col4
A    C    E    Z
Run Code Online (Sandbox Code Playgroud)

我期待:

ExpectedTable:
Col1 Col2 Col3 Col4
A    C    E    Z
A    D    F    Null
Run Code Online (Sandbox Code Playgroud)

我想念什么?谢谢。

Dan*_*Dan 6

这可能不是您的问题,但是,如果联接中使用的任何列为空,即使联接两端的列值为空,Redshift也不会使用相等运算符匹配记录。

要处理此问题,请为每个联接添加一个或条件,以检查双方是否为空。

例如 ((a.col1 = b.col1) or (a.col1 is null and b.col1 is null))

  • 这似乎没有得到很好的记录,但我看到了同样的问题 - 如果连接条件列包含 NULL 值,左外连接不一定会返回左侧表中的所有行。可以解决在每个列周围添加 ISNULL() 的问题。 (2认同)

Mas*_*aki -3

我认为outer您的查询中缺少关键字。这是左外连接的示例。

=> select * from Table1;
 col1 | col2 | col3
------+------+------
 A    | D    | F
 A    | C    | E
(2 rows)

=> select * from Table2;
 col1 | col2 | col4
------+------+------
 A    | C    | Z
(1 row)

=> select Table1.Col1, Table1.Col2, Table1.Col3, Table2.Col4 from Table1 left outer join Table2 on Table1.Col1 = Table2.Col1 and Table1.Col2 = Table2.Col2;
 col1 | col2 | col3 | col4
------+------+------+------
 A    | D    | F    |
 A    | C    | E    | Z
(2 rows)
Run Code Online (Sandbox Code Playgroud)

  • OUTER 关键字在左连接或右连接中是可选的。 (5认同)