Mysql 为每个用户选择一个值,即使没有sql

Mysql 为每个用户选择一个值,即使没有sql,mysql,sql,Mysql,Sql,我有一个银行交易表,我正在尝试创建一个视图,该视图根据卡类型保存每个注册用户的余额。因此,即使用户从未进行过交易,我希望它显示为 --------------------- | user_id | balance | --------------------- | 1 | 0.0 | --------------------- 但当我在没有事务的情况下执行查询时: SELECT u.id AS user_id, SUM(amount) AS balance FROM `tr

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

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

因此,如果可能的话,如何在表中没有事务的情况下检索第一个结果?

您正在寻找外部联接和分组依据:

注:

您需要所有用户,因此它是左侧联接中的第一个表。 每个用户只需要一行,所以需要按u.id分组。 您正在对第二个表进行筛选,因此该筛选器位于on子句中。
您正在通过以下方式查找外部联接和组:

注:

您需要所有用户,因此它是左侧联接中的第一个表。 每个用户只需要一行,所以需要按u.id分组。 您正在对第二个表进行筛选,因此该筛选器位于on子句中。
是的,这会起作用,但它会使余额为空,如果没有,我可以设置一个默认值吗,比如0?我添加了COALESCE以便:选择u.id作为用户id,COALESCESUMt.amount,0作为用户的余额u LEFT在t上加入交易t。FROM_id=u.id和t.card_type='debit'按u.id分组;是的,这会起作用,但它会使余额为空,如果没有,我可以设置一个默认值吗,比如0?我添加了COALESCE以便:选择u.id作为用户id,COALESCESUMt.amount,0作为用户的余额u LEFT在t上加入交易t。FROM_id=u.id和t.card_type='debit'按u.id分组;
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;