问题描述
我有2个选择:
columnA|columnB
A |2
B |3
D |5
columnA|columnC
A |1
B |5
C |7
我想合并此拖车查询,
这是我的查询
with
cte1 as (
select A,B from table1 group by A
),cte2 as (
select A,C from table2 group by A
)
select c1.A,c1.B,c2.C
from cte1 c1 left join cte2 c2
on c2.A = c1.A
order by c1.A asc
问题是当我使用“ Left join
”时,结果是:
ColumnA|ColumnB|ColumnC
A |2 |1
B |3 |5
D |5 |null
它没有显示第二张表的值C,
当我使用“ right join
”时,结果是:
ColumnA|ColumnB|ColumnC
A |2 |1
B |3 |5
C |null |7
结果应该是这样的:
ColumnA|ColumnB|ColumnC
A |2 |1
B |3 |5
C |null |7
D |5 |null
请提供任何解决方案
解决方法
您正在描述full join
:
with
cte1 as (...),cte2 as (...)
select coalesce(c1.a,c2.a) a,c1.b,c2.c
from cte1 c1
full join cte2 c2 on c2.a = c1.a
请注意,此处实际上并不需要CTE,您可以改用子查询:
select coalesce(c1.a,c2.c
from (...) c1
full join (...) c2 on c2.a = c1.a
,
使用full outer join
select coalesce(table1.ColumnA,table2.ColumnA) as ColumnA,ColumnB,ColumnC
from table1 full outer join table2 on table1.ColumnA=table2.ColumnA
,
您似乎希望在此处进行完全外部联接:
SELECT
COALESCE(t1.A,t2.A) AS A,t1.B,t2.C
FROM Table1 t1
FULL OUTER JOIN t2
ON t1.A = t2.A;
Demo