我有三个表,看起来像这样:
表1
id j_id
1 1
2 2
3 3
表2
id j_id table1_id
1 57 1
2 84 1
3 1 1
4 9 2
5 2 2
并且每个j在第三个表中都有一个值
id value
1 1abc
2 2bcd
3 3abc
57 57abc
84 84abc
9 9abc
我正在尝试编写一个查询,该查询将连接表1和表2,并使用第三个表中的J值,而不是J_id、,但问题是,如果第二个表存在,我想使用它,否则使用第一个表的值。
为了让它更清楚,这是我的查询结果,而不使用第三个表:
tbl1.j_id tbl2.j_id
1 1
1 84
1 57
2 2
2 9
3 null
我希望最终查询结果使用第二个表的j值,除非它为空:
tbl1.j_id tbl2.j_id j_id
1 1 1abc
1 84 84abc
1 57 57abc
2 2 2abc
2 9 9abc
3 null 3abc
(问题和标题编辑非常受欢迎,不是很确定如何表达吗。(
您可以简单地在table2.j_id
和table1.j_id
:的COALESCE
上JOIN
到table3
SELECT t1.j_id AS t1_j_id, t2.j_id AS t2_j_id, t3.value
FROM table1 t1
LEFT JOIN table2 t2 ON t2.table1_id = t1.id
JOIN table3 t3 ON t3.id = COALESCE(t2.j_id, t1.j_id)
输出:
t1_j_id t2_j_id value
1 1 1abc
1 57 57abc
1 84 84abc
2 2 2bcd
2 9 9abc
3 null 3abc
dbfiddle 演示
一种解决方案是两次left join
表3:
select
t1.j_id,
t2.j_id,
coalesce(t31.value, t32.value) j_value
from
table1 t1
left join table2 t2 on t2.table1_id = t1.id
left join table3 t31 on t31.id = t2.j_id
left join table3 t32 on t32.id = t1.j_id