假设我有两张桌子
NAME_TABLE
ID1 | ID2 | NAME |
---|---|---|
A | 1 | 杰克 |
B | 2 | CRAIG |
C | 3 | RYAN |
D | 4 | 拉里 |
JOB_TABLE
ID1 | ID2 | 工作 |
---|---|---|
A | 2 | 工程师 |
B | 1 | 教师 |
E | 3 | 分析员 |
F | 4 | 建筑师 |
我想做一个查询,首先检查比较每个表的 ID1,然后在匹配的地方加入它们。如果 ID1 中没有匹配项,则比较 ID2。
所以决赛桌应该是这样的。请注意,如果 ID1 匹配,我们不关心对 ID2 执行任何操作。如果没有 ID1 匹配,我们只关心 ID2:
FINAL_TABLE
NAME | 工作 |
---|---|
杰克 | 工程师 |
CRAIG | 教师 |
RYAN | 分析员 |
拉里 | 建筑师 |
答案 0 :(得分:1)
您可以使用两个 left join
:
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;