SQL 加入 table 并在右侧显示不匹配记录的默认值 table

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

我有 2 个表,我希望在满足特定条件时将它们连接起来。

1) 客户 Table

2) 付款 Table

有了这些表格,我想看看每个客户已经支付了多少。 如果客户还没有付款,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 条记录,即客户 Cliff 付款 25000

我怎样才能达到预期的输出?

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() 到 return 0 而不是 NULL

您不应在 where 中使用左联接 table 的列。这种方式在这些情况下作为内部连接将条件添加到相关的 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