即使没有sql

时间:2018-11-07 11:59:12

标签: mysql sql

我有一个银行交易表,我正在尝试创建一个视图,该视图保存基于卡类型注册的每个用户的余额。因此,即使用户从未进行过交易,我也希望其显示为

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

因此,如果可能的话,我该如何检索表中没有事务的第一个结果?

1 个答案:

答案 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
  • 您要在 second 表上进行过滤,因此过滤器将放在ON子句中。