SQL 语句 join where 如果一个条件不满足,则执行另一个条件

Posted

技术标签:

【中文标题】SQL 语句 join where 如果一个条件不满足,则执行另一个条件【英文标题】:SQL Statement join where if one condition is not met, then do the other one 【发布时间】:2021-01-31 03:15:17 【问题描述】:

假设我有两张桌子

NAME_TABLE

ID1 ID2 NAME
A 1 JACK
B 2 CRAIG
C 3 RYAN
D 4 LARRY

工作表

ID1 ID2 JOB
A 2 ENGINEER
B 1 TEACHER
E 3 ANALYST
F 4 ARCHITECT

我想进行一个查询,首先检查比较每个表的 ID1,然后在它们匹配的地方加入它们。如果 ID1 没有匹配,那么我们比较 ID2。

所以决赛桌看起来像这样。请注意,如果 ID1 匹配,我们不关心对 ID2 做任何事情。如果没有 ID1 匹配,我们只关心 ID2:

FINAL_TABLE

NAME JOB
JACK ENGNEER
CRAIG TEACHER
RYAN ANALYST
LARRY ARCHITECT

【问题讨论】:

【参考方案1】:

你可以使用两个left joins:

select nt.*,
       coalesce(jt1.job, jt2.job) as job
from name_table nt left join
     job_table jt1
     on nt.id1 = jt1.id1 left join
     job_table jt2
     on nt.id2 = jt2.id2 and jt1.id1 is null;

【讨论】:

以上是关于SQL 语句 join where 如果一个条件不满足,则执行另一个条件的主要内容,如果未能解决你的问题,请参考以下文章

SQL 查询条件放在LEFT OUTER JOIN 的ON语句后与放在WHERE中的区别

SQL Left/Inner/Normal Join vs Where while 条件语句

sql中where的与jnner join on的连接条件.哪个优先级别高?

SQL语句中 LEFT JOIN 后 ON 和 WHERE 的区别

SQL语句中 LEFT JOIN 后 ON 和 WHERE 的区别

SQL语句中的join只能与on连用吗?有没有只用join的?举个例子行吗?