gpt4 book ai didi

c# - SQL仅在另一个表中不存在时才从表中获取数据

转载 作者:行者123 更新时间:2023-11-30 20:18:09 25 4
gpt4 key购买 nike

假设我们有一个表Users,用来存储用户的基本信息

    UserId  FirstName   LastName
1 Maria Anders
2 Ana Trujillo
3 Antonio Moreno
4 Thomas Hardy
5 Christina Berglund
6 Hanna Moos
7 Frédérique Citeaux
8 Martín Sommer

我们有两个表 DetailsException 存储关于用户的额外详细信息,实际上两个表具有相同的结构

详细信息

UserId  Age
1 10
2 10
3 10
4 40
5 50
6 60
7 70
8 80

异常

UserId  Age
1 100
2 100
3 100

我想编写查询以从 Exceptionsdetails 中获取有关用户的所有详细信息,如果用户在 exceptions 中存储了信息table 它应该覆盖存储在 details 表中的数据,否则从 details 表中获取数据所以结果应该是

UserId  FirstName   LastName    Age
1 Maria Anders 100
2 Ana Trujillo 100
3 Antonio Moreno 100
4 Thomas Hardy 40
5 Christina Berglund 50
6 Hanna Moos 60
7 Frédérique Citeaux 70
8 Martín Sommer 80

所以在这个例子中,ID 为 1、2、3 的 Maria、Ana 和 Antonio 在 details 表中的年龄为 10,但因为他们的数据存储在 excpetions 表中应显示年龄 100,对于其他用户,excpetion 表中没有信息,因此我们只需从 details 表中获取数据即可。

实际上,我想出了一个解决方案,但我认为我可以编写更好的查询,这是我的解决方案

select u.UserId, u.FirstName , u.LastName , e.Age from Exceptions e

inner join Users u on u.UserId = e.UserId

union select u.UserId, u.FirstName , u.LastName , d.Age from Details d

inner join Users u on u.UserId = d.UserId

where d.UserId not in ( select UserId from Exceptions )

有什么办法可以避免这个子查询吗?我们可以做得更好吗?

最佳答案

您可以使用一对左连接和 CASE WHEN(或检查 null)

select 
u.UserId
, u.FirstName
, u.LastName
, CASE WHEN e.Age IS NOT NULL then e.age ELSE d.age END as AGE
from Users u
left join Details as d on .UserId = d.UserId
left join Exceptions e on e.UserId = u.UserId

关于c# - SQL仅在另一个表中不存在时才从表中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42409712/

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