如何优化SQL查询在MySQL 6.3.3中实现预期状态统计结果
问题根因
原有SQL使用隐式内连接语法,仅会返回table1和table2中Status字段完全匹配的记录,table2中存在但table1无对应关联数据的状态会被过滤,无法展示计数为0的条目,和预期输出不符。
优化后SQL
SELECT table2.Status AS StatusName, COUNT(table1.Status) AS NoOfStatus FROM testingdb.table2 LEFT JOIN testingdb.table1 ON table2.Status = table1.Status GROUP BY table2.Status;
改动说明
- 替换原有的逗号分隔隐式内连接为
LEFT JOIN左外连接,以存储全量状态值的table2为主表,会保留table2里的所有状态,不会因为table1里没有对应数据就把该状态过滤掉 - 保留
COUNT(table1.Status)的计数逻辑:左连接匹配不到数据时,table1的字段会返回NULL,COUNT会自动跳过NULL值,没有对应数据的状态就会正确显示计数0 - 分组字段改为
table2.Status,避免关联后table1.Status为空导致分组逻辑异常
内容的提问来源于stack exchange,提问作者cahmad
相关产品推荐
相关产品推荐

