我有三个看起来像这样的表:表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,but问题是我想要使用第二个表中的j值是否存在,否则使用第一个表中的j值。
为了使内容更清楚,这是我的查询结果,而没有使用第三张表:
tbl1.j_id tbl2.j_id
1 1
1 84
1 57
2 2
2 9
3 null
我想结束查询结果以使用第二个表,除非它为null:
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
(欢迎对问题和标题进行编辑,不确定如何措辞。.]
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
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