Postgresql mulit-column join包含NULL值

时间:2016-02-18 13:57:11

标签: postgresql

我想在Postgresql 9.5 JOIN两列中ON两个表:

CREATE TABLE table_a (col1 INT, col2 INT, col3 TEXT);
CREATE TABLE table_b (col1 INT, col2 INT, col3 TEXT);

INSERT INTO table_a (col1, col2, col3)
  VALUES (1, 2, 'foo'), (NULL, 3, 'foo');

INSERT INTO table_b (col1, col2, col3)
  VALUES (1, 2, 'bar'), (NULL, 3, 'bar');

当我加入

SELECT a.col3, b.col3
FROM table_a a
  LEFT JOIN table_b b
    ON a.col1 = b.col1 AND
       a.col2 = b.col2;

未加入null值的行。

a.col3 | b.col3
---------------
  foo  |  bar
  foo  | <null>

但是,我想将两个列连接起来,即包括其中一个值为null的列。所以在这个例子中应该有foo bar出现两次。我怎么能做这个工作?

1 个答案:

答案 0 :(得分:1)

如果您在该列中没有值,则可以使用coalesce()

SELECT a.col3, b.col3
FROM table_a a
  LEFT JOIN table_b b
    ON ON coalesce(a.col1,-1) = coalesce(b.col1,-1) AND a.col2 = b.col2 

请注意,如果包含col1 = -1的任何(实际)行,则才能正常工作,否则您将得到错误的结果!