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
我有 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