簡體   English   中英

加入2張桌子以獲取所有原始數據。 獲取所有不同的聯接列

[英]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 idname

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 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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM