作为背景,我已经设置了100个红移查询,比这复杂得多,但我认为我必须遗漏一些简单的事情。
我在表1和表2之间进行左外连接。表基本上是这样的:
Table1
Col1 Col2 Col3
A C E
A D F
Table2
Col 1 Col2 Col3
A C Z
我没有任何陈述。我的声明是:
on Table1.Col1 = Table2.Col1 and Table1.Col2 = Table2.Col2
我的结果表是:
ResultTable:
Col1 Col2 Col3 Col4
A C E Z
我在期待:
ExpectedTable:
Col1 Col2 Col3 Col4
A C E Z
A D F Null
我错过了什么?感谢。
答案 0 :(得分:6)
这可能不是您的问题,但如果连接中使用的任何列为空,则Redshift不会使用相等运算符匹配记录,即使连接两侧的列值为空也是如此。
要处理此问题,请为每个连接添加一个或条件,检查双方是否为空。
e.g。 ((a.col1 = b.col1) or (a.col1 is null and b.col1 is null))
答案 1 :(得分:0)
似乎从今天开始,一切都按预期进行
WITH tst1 AS ( SELECT 'A' AS col1
, 'C' AS col2
, 'E' AS col3
UNION ALL
SELECT 'A' AS col1
, 'D' AS col2
, 'F' AS col3 )
, tst2 AS ( SELECT 'A'::VARCHAR AS col1
, 'C'::VARCHAR AS col2
, 'Z'::VARCHAR AS col3 )
SELECT tst1.col1
, tst1.col2
, tst1.col3
, tst2.col3 AS col4
FROM tst1
LEFT JOIN tst2 ON tst1.col1 = tst2.col1
AND tst1.col2 = tst2.col2;
col1 | col2 | col3 | col4 |
---|---|---|---|
A | C | E | Z |
A | D | F |
答案 2 :(得分:-2)
我认为您的查询中缺少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)