gpt4 book ai didi

sql - t-sql 中的左外连接

转载 作者:行者123 更新时间:2023-12-02 13:43:54 24 4
gpt4 key购买 nike

我有以下两个表。我使用的是 SQL Server 2008 R2

Create table #tmp1 (
a char(1)
)

Create table #tmp2 (
id int,
a char(1),
val int
)

insert #tmp1 values ('A')
insert #tmp1 values ('B')
insert #tmp1 values ('C')

insert #tmp2 values (1, 'A', 10)
insert #tmp2 values (1, 'B', 20)
insert #tmp2 values (2, 'A', 30)
insert #tmp2 values (2, 'C', 40)

select * from #tmp1 t1 left outer join #tmp2 t2 on t1.a = t2.a
order by t2.id

这将返回结果集

A   1   A   10
B 1 B 20
C 2 C 40
A 2 A 30

我想要以下结果集

 A     1    A       10
B 1 B 20
C 1 null null
A 2 A 30
B 2 null null
C 2 C 40

现在,我正在通过创建一个具有这样的交叉联接的新表,然后执行外部联接来实现此目的

select * into #tmp3 from #tmp1 cross join (select distinct ID from #tmp2) t
select * from #tmp3 t1 left outer join #tmp2 t2 on t1.a = t2.a and t1.id = t2.id

有更好的方法吗?

谢谢

最佳答案

为了得到你想要的东西,你需要一张“驾驶” table 。也就是说,您需要所有组合的完整列表,然后连接到其他表以获取匹配项。这是一种方法:

select t1.a, t2.*
from (select t1.a as a, t2.id as id
from (select distinct a from #tmp1 t1) t1
cross join
(select distinct id from #tmp2 t2) t2
) driving left outer join
#tmp1 t1
on t1.a = driving.a left outer join
#tmp2 t2
on t2.id = driving.id and
t2.a = driving.a
order by t2.id

关于sql - t-sql 中的左外连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13993690/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com