首页 > 解决方案 > 在sql中合并两个查询

问题描述

我在 sql 查询中有一个问题。

我有 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

它没有显示第一个表的值 D,

结果应该是这样的:

 ColumnA|ColumnB|ColumnC
    A      |2      |1
    B      |3      |5
    C      |null   |7
    D      |5      |null

请有任何解决方案

标签: sqlsql-serverfull-outer-join

解决方案


您正在描述一个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.a) a, c1.b, c2.c
from (...) c1
full join (...) c2 on c2.a = c1.a

推荐阅读