加入两个表,使用第一个表中的值,除非它为空,否则使用第二个表中的值

问题描述 投票:0回答:1

我有三个看起来像这样的表:表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_idbut问题是我想要使用第二个表中的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

(欢迎对问题和标题进行编辑,不确定如何措辞。.]

sql sqlite join null
1个回答
0
投票
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

0
投票
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
© www.soinside.com 2019 - 2024. All rights reserved.