2017-06-22 17 views
0

我有2個類似的表加入2個表格以獲取所有原料。獲取所有不同的連接列

CREATE TABLE arstel.b2b_join2(
id string 
, name string 
, col1 string 
, col2 string 
); 

我填寫他們的數據。第一張桌子。

INSERT INTO TABLE arstel.b2b_join1 VALUES 
("1", "a", "a1", "a2") 
, ("2", "b", "b1", "b2") 
, ("3", "c", "c1", "c2") 
, ("4", "d", "d1", "d2"); 

Secnd表

INSERT INTO TABLE arstel.b2b_join2 VALUES 
("1", "a", "a11", "a22") 
, ("2", "b", "b11", "b22") 
, ("5", "e", "e11", "e22") 
, ("6", "f", "f11", "f22"); 

我查詢

SELECT 
CASE WHEN a.id = NULL THEN b.id ELSE a.id END AS id 
, CASE WHEN a.name = NULL THEN b.name ELSE a.name END AS name 
, a.col1 
, a.col2 
, b.col1 
, b.col2 
FROM arstel.b2b_join1 a 
FULL OUTER JOIN arstel.b2b_join2 b 
ON a.id = b.id AND a.name = b.name; 

返回從表a所有的值,但不會從b

4  d  d1  d2  NULL NULL 
1  a  a1  a2  a11  a22 
NULL NULL NULL NULL e11  e22 
2  b  b1  b2  b11  b22 
NULL NULL NULL NULL f11  f22 
3  c  c1  c2  NULL NULL 
返回 idname

其實我要的是

4  d  d1  d2  NULL NULL 
1  a  a1  a2  a11  a22 
5  e  NULL NULL e11  e22 
2  b  b1  b2  b11  b22 
6  f  NULL NULL f11  f22 
3  c  c1  c2  NULL NULL 

如何獲得呢?

回答

0

你不應該null比較。改爲使用is nullis not null

你需要可以用COALESCE待取得的結果。它返回第一個非空值。

SELECT 
    COALESCE(a.id,b.id) AS id 
, COALESCE(a.name,b.name) AS name 
, a.col1 
, a.col2 
, b.col1 
, b.col2 
FROM arstel.b2b_join1 a 
FULL OUTER JOIN arstel.b2b_join2 b 
ON a.id = b.id AND a.name = b.name; 
+0

我實際上在發佈問題後認爲是'null')但是不知道'coalesce'。謝謝 – Evgenii