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)
我想念什么?谢谢。
这可能不是您的问题,但是,如果联接中使用的任何列为空,即使联接两端的列值为空,Redshift也不会使用相等运算符匹配记录。
要处理此问题,请为每个联接添加一个或条件,以检查双方是否为空。
例如 ((a.col1 = b.col1) or (a.col1 is null and b.col1 is null))
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)