我有这个结构:
表A - | id_A | field_1a | id_B | value_A |
表B - | id_B | field_1b | field_2b | value_B |
表C - | field_1c | id_D | ID_A |
表D - | id_D |描述|
我想获得一个返回的查询:
- 值A,如果此值为null,则返回其在B中的值。
- 表D到表C的描述。如果行不在C中,则返回null。
我实现了第一部分,但我陷入了第二部分。据我所知,这是我的疑问:
select a.id_A
if (VALOR_b is null, VALOR_a, VALOR_b) as valor,
d.description
from A a inner join B b
on a.id_B = b.id_B
inner join C c
on c.id_A = A.id_A
inner join D d
on d.id_D = c.D
正如我所说,我正在获取第一部分,只是我可以通过C传递的值,但是当我可以在查询的前一部分中将它们交叉为空值时,我需要。
希望我解释清楚。拜托,请问我有任何疑问。 提前谢谢。
答案 0 :(得分:4)
对left join
和C
使用D
如果您使用SQL标准coalesce()
而不是if ()
:
select
a.id_A,
coalesce(VALOR_a, VALOR_b) as valor,
d.description
from A a
join B b on a.id_B = b.id_B
left join C c on c.id_A = A.id_A
left join D d on d.id_D = c.D
如果没有匹配的行, Left join
仍会从父表返回一行,在这种情况下,它会返回连接表中的所有空值“
coalesce()
接受任意数量的参数并返回第一个非空值。