mysql - 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 不能。
解决方案
默认情况下,UNION 是 UNION DISTINCT,这意味着在子查询中将过滤掉任何重复的行。将其更改为 UNION ALL。请参阅UNION 和 UNION ALL 有什么区别?
推荐阅读
- azure - WebSocket 握手期间出错:意外的响应代码:在 azure 上与 ocelot 网关连接时出现 502
- reactjs - 为什么要在 url %E2%80%8B 中获取 api 添加转义字符
- sql - 如何从 SQL Server 表中提取第二高的产品使用率?
- r - 数据序列 - 如何提取与时间序列中的时间相关的特定数据
- java - Java 使用 Stream 按值对映射进行排序
- swift - 我可以在 ARView 中使用缩放功能吗?
- gdb - CLion如何在exec'd进程中设置断点
- excel - 通过选择特定行,使用 VBA 将 Excel 链接到 Word 文档
- python - 没有正确插入简单的 Varchar?生成字符串
- android - LeakCanary 无法找到保留对象的路径