繁体   English   中英

SQL连接表,并在右表中显示不匹配记录的默认值

[英]SQL Join tables and show default value for unmatched records in the right table

我有2个表,我希望它们在满足某些条件时可以加入。

1)客户表

客户表

2)付款表

付款表

使用这些表,我想查看每个客户已经支付了多少。 如果客户尚未付款,则amount栏应为0

我有这个SQL查询,但不会显示没有付款的客户。

SELECT c.id, c.name, co.amount FROM clients c LEFT OUTER JOIN collectibles co ON c.id = co.client_id WHERE co.removed = 0

该查询的结果将仅显示1条记录,即付款25000客户Cliff

我将如何实现预期的输出?

WHERE子句将外部联接转换为内部联接。 我想你要:

SELECT c.id, c.name, COALESCE(co.amount, 0) as amount
FROM clients c LEFT OUTER JOIN
     collectibles co
     ON c.id = co.client_id AND co.removed = 0;

您需要COALESCE()返回0而不是NULL

您不应在其中使用左联接表的列。 在这种情况下,这种方式可以用作内部联接,将条件添加到相关的ON子句中

  SELECT c.id
    , c.name
    , ifnull(co.amount ,0)
FROM clients c 
LEFT OUTER JOIN collectibles co ON c.id = co.client_id 
          AND co.removed = 0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM