根据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);

注意:如果您需要D2D3 都为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中的条件从不同的表中选择一个值的主要内容,如果未能解决你的问题,请参考以下文章

从具有不同条件的表中选择总和和平均值

SQL,如何从不同的表中选择属性?

Laravel Raw 语句我可以根据列数据是不是等于另一个表从不同的表中进行选择

从字段不匹配条件的表中选择

如何使用组合框根据另一个组合框的值从不同的表中选择数据

SQL Query 从不同的表中选择相同的数据,显示所有记录,但显示/显示匹配