SQL连接查询如何不遗漏数据?保留无交易记录的账户
解决SQL JOIN排除无交易账户的问题
你当前使用的是内连接(INNER JOIN),这种连接逻辑只会返回两张表中满足连接条件的匹配行,因此没有交易记录的Alice Johnson被排除在结果之外。
要保留所有账户(即使无交易记录),你需要改用左连接(LEFT JOIN)——它会完整保留左表(accounts)的所有数据,右表(transactions)中没有匹配的行时,对应列会填充为NULL。同时,因为SUM(NULL)会返回NULL,可以用COALESCE()函数将其转换为0,让结果更符合预期。
修改后的查询语句:
SELECT a.account_id, a.account_holder, COALESCE(SUM(t.amount), 0) AS total_transactions FROM accounts a LEFT JOIN transactions t ON a.account_id = t.account_id GROUP BY a.account_id, a.account_holder;
执行后会得到包含所有账户的结果:
account_id | account_holder | total_transactions ----------------------------------------------- 1 | John Doe | -700.00 2 | Jane Smith | -100.00 3 | Alice Johnson | 0.00
简单说明:
LEFT JOIN确保左表所有行都被保留,不受右表匹配情况影响COALESCE(SUM(t.amount), 0)把无交易账户的总额从NULL转为0,让结果更直观可读
内容的提问来源于stack exchange,提问作者ChillPenguin
相关产品推荐
相关产品推荐

