2016-02-18 39 views
1

我想在PostgreSQL JOIN兩個表9.5 ON兩列:PostgreSQL的多功能使用列聯接包含空值

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> 

但是,我想要加入兩個列,即包括其中一個值爲空的那些列。所以在這個例子中應該有foo bar出現兩次。我怎麼能做這個工作?

+0

類似'ON coalesce(a.col1,-1)= coalesce(b.col1,-1)AND a.col2 = b.col2' –

+0

@a_horse_with_no_name完全有效。尼斯。關心接受的答案? – n1000

回答

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否則你會得到一個錯誤的結果!