内部连接后如何获取值为null?

时间:2017-09-30 09:49:45

标签: mysql

我有这个结构:

  

表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传递的值,但是当我可以在查询的前一部分中将它们交叉为空值时,我需要。

希望我解释清楚。拜托,请问我有任何疑问。 提前谢谢。

1 个答案:

答案 0 :(得分:4)

left joinC使用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()接受任意数量的参数并返回第一个非空值。