连接两个表,使用第一个表中的值,除非它为null,否则使用第二个表的值



我有三个表,看起来像这样:

表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_idtable1.j_id:的COALESCEJOINtable3

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

相关内容

  • 没有找到相关文章

最新更新