[英]Join 2 tables to get all raws. Get all distinct join columns
我有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");
秒表
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
id
和name
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
我真正想要的是
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
我如何得到它?
您不應該將它與null
進行比較。 Use is null
或is 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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.