假设我有 Table1(A, B, C) 和 Table2(B)
Table1:
A | B | C
------------------------
a1 b1 c1
a1 b2 c2
a2 b1 c3
Table2:
B
--
b1
b2
b3
b4
我想要的结果:
A | B | C
-------------------
a1 b1 c1
a1 b2 c2
a1 b3 [some default value]
a1 b4 [some default value]
a2 b1 c3
a2 b2 [some default value]
a2 b3 [some default value]
a2 b4 [some default value]
我该怎么做?
本质上,我需要一种方法来右外连接 table1 和 table2,但是“分组依据”列 A。
最佳答案
您可以通过CROSS JOIN
Table1
中A
的不同值与B< 的值来实现您想要的结果
从 Table2
然后 LEFT JOIN
再次连接到 Table1
以获取相应的 C
值,使用 COALESCE
在没有匹配的 C
值时提供默认值:
SELECT t1.A, t2.B, COALESCE(t3.C, 'c0') AS C
FROM (SELECT DISTINCT A
FROM Table1) t1
CROSS JOIN Table2 t2
LEFT JOIN Table1 t3 ON t3.A = t1.A AND t3.B = t2.B
输出:
a b c
a1 b1 c1
a1 b2 c2
a1 b3 c0
a1 b4 c0
a2 b1 c3
a2 b3 c0
a2 b2 c0
a2 b4 c0
关于每个组内的 SQL 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58812248/