两次NATURAL JOIN后COUNT结果错误的SQL问题排查
皮克斯电影数量统计SQL错误原因排查
错误根源
- 重复关联同一张表引发笛卡尔积:你写的SQL里连续两次
NATURAL JOIN productioncompanies,相当于把制作公司表和自身做关联后再匹配电影表。皮克斯的记录会和所有制作公司的记录交叉匹配,产生大量无意义的重复行,这直接导致统计出4803这个夸张的错误结果。 - 未针对唯一电影统计:就算关联逻辑正确,一部电影可能对应多个制作公司,直接用
COUNT(movie_id)会把所有匹配行都算进去,而非统计不重复的电影数量。
修正后的SQL写法
写法一(保留NATURAL JOIN)
SELECT COUNT(DISTINCT movie_id) FROM movies NATURAL JOIN productioncompanies WHERE production_company_name = "Pixar Animation Studios"
写法二(显式指定关联字段,逻辑更清晰)
SELECT COUNT(DISTINCT m.movie_id) FROM movies m JOIN productioncompanies pc ON m.movie_id = pc.movie_id WHERE pc.production_company_name = "Pixar Animation Studios"
内容的提问来源于stack exchange,提问作者Tewfiq
相关产品推荐
相关产品推荐

