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 join
s:
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 的区别