首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用另一个SQL表从表中进行条件选择

问使用另一个SQL表从表中进行条件选择
EN

Stack Overflow用户
提问于 2020-05-18 21:07:29
回答 1查看 29关注 0票数 0

我在如何设置这个动态条件select语句方面遇到了一些困难。

我已经将其简化为以下基本前提:

我有两个表,表1是Cars

代码语言:javascript
复制
   Id  Serial  Size
   1    x99     M
   2    x99     L
   3    z50     M
   4    x99     S

表二是一个CodeAssignment表:

代码语言:javascript
复制
   Id  Serial  Size  Code
   1    x99     L    5000
   2    x99    NULL  3000
   3    z50    NULL   60

我正在尝试获取一条语句,该语句将拉出以下内容:

代码语言:javascript
复制
   Id  Serial  Size  Code
   1    x99     M    3000
   2    x99     L    5000
   3    z50     M     60
   4    x99     S    3000

其中代码是默认拉取的(例如,CodeAssignment上的Size为NULL ),除非有指定的大小,否则应优先使用该大小。

如果我这样做了

代码语言:javascript
复制
select * from Test..Cars c
left join Test..CodeAssignment a on c.Serial = a.Serial and c.Size = a.Size

我得到了正确的Code,但只针对在CodeAssignment表中具有Size条目的条目。

我尝试用一个c.Size为空的联合来附加它,但它返回了L x99汽车的两个赋值...

我曾尝试使用CASE WHEN,但我认为这只可能与硬编码的值一起使用,我的问题是,这应该从第二个表中有条件地拉出,并且将有多个条件列来测试。

有没有可能使用当前的设置,或者我如何设置表来完成这类事情?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-18 21:16:31

您可以使用两个left join:

代码语言:javascript
复制
select c.*, coalesce(ca.code, cad.code) as code
from cars c left join
     codeassignment ca
     on ca.serial = c.serial and ca.size = c.size left join
     codeassignment cad
     on cad.serial = c.serial and cad.size is null and ca.size is null;

Here是一个db<>fiddle。

第一个left join用于精确匹配。第二个是如果第一个不匹配,则为默认值。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61870306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档