我有两个关系relation1和relation2,其中relation1有列A、B、C,relation2有列D、E、F。对于一个查询,我正在对relation1和relation2对C=F进行完全联接。
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
如何得到这个?
你在找这个吗?
SELECT A, B, D, E, COALESCE(C, F) M
FROM relation1 r1 FULL JOIN relation2 r2
ON r1.C = r2.F
假设关系1:
|A|B|C|---------------|a1|b1|1||a2|b2|2|
和关系2:
|D|E|F|---------------|d1|e1|1||d3|e3|3|
输出将为
|A|B|D|E|M|-----------------------------------------|a1|b1|d1|e1|1||a2|b2|(null)|(null||(null)|(null)|d3|e3|3|
这是SQLFiddle演示
您可以在查询中使用别名,即C作为M,F作为M
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
M
(作为名称)不可能在SELECT
列表中出现两次。输出列名必须是唯一的。
一般来说,我更喜欢@peterm的COALESCE()
解决方案(就像我回答了你最后一个问题一样)
这里有另一种方法可以通过子查询和JOIN
条件的USING
子句来实现相同的目的。
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)