MySQL UNION截断返回的数据集

时间:2012-03-17 22:31:50

标签: mysql sql

SELECT current_raised,segment FROM gizmos
where created_at >= "2012-03-01"

返回600多行

SELECT "current_raised","segment"
UNION
(SELECT current_raised,segment FROM gizmos
where created_at >= "2012-03-01")

返回180行

为什么会这样?

2 个答案:

答案 0 :(得分:6)

union会从结果集中删除每个重复的current_raised, segment对。请改为union all

这是正在发生的事情的减少example

答案 1 :(得分:-1)

这是标准SQL的一个稍微令人困惑的功能:SELECT的默认限定符为SELECT ALL,但UNION的默认限定符为UNION DISTINCT

您的第一个查询隐式使用SELECT ALL并在结果中返回重复的行,这不是很好。通过明确使用SELECT DISTINCT来纠正第一个查询。