连接 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");

第二表

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 中的所有值,但不返回idname 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

我真正想要的是

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进行比较。请改用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;

最新更新