Left Outer Join未返回全部记录,如何修正SQL查询获预期结果?
解决Left Outer Join未返回所有门店销售总额的问题
表结构与数据
filial表(门店表)
| Row | codfilial | Filial |
|---|---|---|
| 1 | 1 | Mandson Park |
| 2 | 10 | Brunns Ave |
nf表(销售记录表)
| Row | codfilial | sold |
|---|---|---|
| 1 | 1 | 50.99 |
| 2 | 1 | 10.49 |
| 3 | 1 | 1.99 |
原查询问题
原查询尝试通过左连接获取所有门店的销售总额,但仅返回了codfilial=1的记录:
select a.codigo as cod, sum(nvl(b.sold, 0)) as total from filial a left outer join nf b on a.codfilial = b.codfilial where 1e1 = 1e1
修改后的正确查询
select a.codfilial as cod, sum(nvl(b.sold, 0)) as total from filial a left outer join nf b on a.codfilial = b.codfilial group by a.codfilial
问题说明
- 字段错误:原查询误用了不存在的字段
a.codigo,实际应使用filial表的codfilial字段,否则codfilial=10的记录会因字段值为null,在无分组的聚合中被合并丢失。 - 缺少分组:使用聚合函数
sum()时必须配合group by指定分组字段(这里是a.codfilial),否则所有行会被聚合为单一结果行,无法保留每个门店的独立总额。 - 冗余条件:
where 1e1 = 1e1是恒成立的无效条件,可移除以简化代码。
内容的提问来源于stack exchange,提问作者Seyfertt
相关产品推荐
相关产品推荐

