根据sql中的条件从不同的表中选择一个值
Posted
技术标签:
【中文标题】根据sql中的条件从不同的表中选择一个值【英文标题】:select a value from different table based on conditions in sql 【发布时间】:2021-05-05 15:25:29 【问题描述】:我正在尝试根据当前表的值和条件从不同的表中选择一个值
表 1:
C1 | C2 | C3 |
---|---|---|
1 | 2 | 3 |
1 | 4 | 5 |
1 | 6 | 6 |
2 | 3 | 3 |
表 2:
D1 | D2 | D3 | D4 |
---|---|---|---|
1 | 2 | 3 | Value1 |
1 | 4 | 5 | Value2 |
1 | 6 | 8 | Value3 |
2 | 3 | 4 | Value4 |
2 | Value5 |
我试图在单行 sql 中获取以下预期结果表 结果:
C1 | C2 | C3 | D4 |
---|---|---|---|
1 | 2 | 3 | Value1 |
1 | 4 | 5 | Value2 |
1 | 6 | 6 | |
2 | 3 | 3 | Value5 |
条件是只选择D4值
(C1=D1 and C2=D2 and C3=D3) matches then D4
或当 C1=D1 matches then D4 else null for all
我尝试了内部连接和 case 语句,但没有成功
这是我创建的fiddle
【问题讨论】:
用您正在使用的数据库标记您的问题。 【参考方案1】:这看起来像left join
:
select t1.*, t2.d4
from table1 t1 left join
table2 t2
on t1.C1 = t2.D1 and
(t1.C2 = t2.D2 or t2.D2 is null) and
(t1.C3 = t2.D3 or t2.D3 is null);
注意:如果您需要D2
和D3
都为NULL
,从解释中很难判断。如果是这样:
select t1.*, t2.d4
from table1 t1 left join
table2 t2
on t1.C1 = t2.D1 and
(t1.C2 = t2.D2 and t1.C3 = t2.D3 or
t2.D2 is null and t2.D3 is null
);
Here 是小提琴。
【讨论】:
第二个解决方案是我正在寻找的。如果第一个条件为 null,则查找 C1=D1,即使失败,也将其保留为 null。 我们可以做的是 D4 列上的空条件,意思是如果第一个条件 (C1=D1 & C2=D2 & C3=D3) 满足,但从 t2 中提取的 D4 值为空,则查找第二个条件(C1=D1) 并从中拉出 D4,如果该值也为 null,则将其保留为 null 这是小提琴 (db-fiddle.com/f/ehyjtuUSr6NgeFS8Gbspr9/1) @fonr 。 . .您能否提出一个新问题,并提供清晰的解释和示例数据? 我再次详细询问了我想要实现的目标。谢谢。 ***.com/questions/67472681/…以上是关于根据sql中的条件从不同的表中选择一个值的主要内容,如果未能解决你的问题,请参考以下文章