我的意思是,举例来说,我有一个查询,它结合了两个表 A
和 B
的结果;其中 A
有一些列与 B
相同,但有几个不同的列,B
也是如此。是否有一个命令可以合并相同列中的数据 (UNION),但在最终结果中连接不同的列 (JOIN),否则我将不得不以乏味的方式进行操作?
更喜欢为 SQLite 或 Postgresql 量身定制的答案,但其他任何答案都可以。
编辑:
假设表 A
有以下列:
ID Source Destination Timestamp
表 B
有以下列:
ID Source Destination Group Read
我希望表 C
(查询)具有以下列,在这两种情况下,互斥列都具有 NULL
值:
ID Source Destination Timestamp Group Read
最佳答案
如果要合并两个只有部分相等列的表,则必须用 NULL 或其他默认值填充相应表中缺失的列。例如
- 包含 A、B、C、D、E 列的表 X
- 包含 A、B、C、F 列的表 Y
SELECT A, B, C, D, E, '' AS F
FROM X
UNION ALL
SELECT A, B, C, '' AS D, NULL AS E, F
FROM Y
如果要消除重复项,请使用 UNION(不使用 ALL)。只有在额外的列与用于其他表的默认值相匹配的情况下才能存在重复项。
另一种方法是连接匹配的列以消除这些列上的重复项
SELECT
COALESCE(X.A, Y.A) AS A,
COALESCE(X.B, Y.B) AS B,
COALESCE(X.C, Y.C) AS C,
X.D,
X.E,
Y.F
FROM
X
FULL OUTER JOIN Y
ON X.A = Y.A AND
X.B = Y.B AND
X.C = Y.C
这可能最符合您结合 UNION 和 JOIN 的想法。与 UNION 方法不同,它合并具有相等 A、B 和 C 的行。
请注意,您必须使用 FULL OUTER JOIN包括两个表的结果,即使另一个表中缺少相应的记录。并非所有 SQL 方言都有外部连接。
coalesce function在不同的方言中有不同的名字。
您可能还会遇到 JOIN missing NULL values加入 NULL 值时出现问题。
关于sql - 是否有一个命令结合了 SQL 中 UNION 和 JOIN 的功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54236631/