我有一个银行交易表,我正在尝试创建一个视图,该视图保存基于卡类型注册的每个用户的余额。因此,即使用户从未进行过交易,我也希望其显示为
---------------------
| user_id | balance |
---------------------
| 1 | 0.0 |
---------------------
但是当我查询没有事务的时候:
SELECT u.id AS user_id, SUM(amount) AS balance FROM `transactions` t
INNER JOIN users u
ON t.from_id = u.id
WHERE card_type = 'debit'
它返回:
---------------------
| user_id | balance |
---------------------
| null | null |
---------------------
因此,如果可能的话,我该如何检索表中没有事务的第一个结果?
答案 0 :(得分:2)
您正在寻找外部联接-和group by
:
SELECT u.id AS user_id, COALESCE(SUM(t.amount), 0) AS balance
FROM users u LEFT JOIN
transactions t
ON t.from_id = u.id AND
t.card_type = 'debit'
GROUP BY u.id;
注意:
LEFT JOIN
中的第一个表。GROUP BY u.id
。ON
子句中。