首页 > 解决方案 > MySQL Union 返回不一致的结果

问题描述

我有一个 UNION 语句来组合来自两个不同表(MySQL 5.6)的学生的分数。它返回不一致的结果。当我独立运行每个语句时,它们会为所有学生生成正确的结果。当我将它们与 UNION 结合起来时,除了一个学生之外,它对所有人都是正确的。

更奇怪的是,如果我删除了从第一个查询中添加的任何一个项目,它对所有记录的总和是正确的。

例如,从查询中删除sum(ifnull(owl_tracker.pre_req_points,0))orsum(ifnull(owl_tracker.bonus_points,0))会导致它为所有学生返回正确的结果。

select first_name, last_name, location, sum(total_points) as total_points from (
select first_name, last_name, location, (
                sum(ifnull(owl_tracker.pre_req_points,0)) + 
                sum(ifnull(owl_tracker.bonus_points,0)) +
                sum(ifnull(owl_tracker.a_points,0))) AS total_points
from products, students_products, students

在这里小提琴:http ://sqlfiddle.com/#!9/7ea891/1

学生 A 工作正常,但学生 B 不能。

标签: mysqlsql

解决方案


默认情况下,UNION 是 UNION DISTINCT,这意味着在子查询中将过滤掉任何重复的行。将其更改为 UNION ALL。请参阅UNION 和 UNION ALL 有什么区别?


推荐阅读