我有两个关系relation1和relation2,其中relation1有列A,B,C,relation2有列D,E,F。对于查询,我在关于C = F的relation1和relation2上进行完全连接。
SELECT A,B,C,D,E,F
FROM relation1 r1 FULL JOIN relation r2
ON r1.C=r2.F
所以当C = F时,结果包含
A,B,C,D,E,F values
当C不在F中时,结果包含
A,B,C, null,null,null
当F不在C中时,结果包含
null,null,null,D,E,F
这就是我的期望。现在我想做C,F在结果中用相同的名字(M)标识。所以当C = F时,结果包含
A,B,M,D,E values
当C不在F中时,结果包含
A,B,M, null,null,null
当F不在C中时,结果包含
null,null,null,D,E,M
如何获得这个?
答案 0 :(得分:1)
你在找这个吗?
SELECT A, B, D, E, COALESCE(C, F) M
FROM relation1 r1 FULL JOIN relation2 r2
ON r1.C = r2.F
假设为relation1:
| A | B | C | --------------- | a1 | b1 | 1 | | a2 | b2 | 2 |
和relation2:
| D | E | F | --------------- | d1 | e1 | 1 | | d3 | e3 | 3 |
输出
| A | B | D | E | M | ----------------------------------------- | a1 | b1 | d1 | e1 | 1 | | a2 | b2 | (null) | (null) | 2 | | (null) | (null) | d3 | e3 | 3 |
这是 SQLFiddle 演示
答案 1 :(得分:0)
您可以在查询中使用别名,即C为M,F为M
答案 2 :(得分:0)
SELECT A,B,
case when C is not null then M end,
D,E,
case when F is not null then M end
FROM relation1 r1
FULL JOIN relation r2
ON r1.C=r2.F
除非M只是别名,否则
SELECT A,B,C as M, D,E, F as M
FROM relation1 r1
FULL JOIN relation r2
ON r1.C=r2.F
答案 3 :(得分:0)
无法在M
列表中有SELECT
(作为名称)两次。输出列名称必须是唯一的。
通常我希望@peterm's solution加COALESCE()
(like I answered to your last question)
这是使用子查询和USING
clause for the JOIN
condition实现相同的另一种方法。
SELECT A, B, D, E, M
FROM (SELECT A, B, C AS M FROM relation1) r1
FULL JOIN (SELECT D, E, F AS M FROM relation2) r2 USING (M)