MySQL联合不是确定性的

时间:2016-04-13 12:19:01

标签: mysql union

乍一看这是两个等于查询:

SELECT obj_id 
FROM obj t JOIN joined_a a  ON t.`id` = a.`obj_id`
UNION 
SELECT obj_id
FROM obj t JOIN joined_b b  ON t.`id` = b.`obj_id`;

SELECT obj_id
FROM obj t JOIN joined_b b  ON t.`id` = b.`obj_id`
UNION
SELECT obj_id 
FROM obj t JOIN joined_a a  ON t.`id` = a.`obj_id`;

它们仅与选择序列不同。

这两个查询的结果行数量不同!

怎么可能?

如果我将DISTINCT添加到每个SELECT ...行数量将具有NEW值,最大值!

如果我为每个SELECT添加括号,如

(select ...)
UNION 
(select ...)

行数量将具有DISTINCT的值。

2 个答案:

答案 0 :(得分:1)

这两个查询将返回相同的行,但不一定按相同的顺序。

UNION会为您重复删除结果,因此无论SELECT顺序如何,DISTINCT都不执行任何操作,结果集的大小也相同。

适合您测试的唯一解释是在两者的运行之间插入了更多数据。

答案 1 :(得分:0)

你是对的!

我陷入了与SQLYog终极GUI界面v11.11 BUG-feacher的阴险陷阱!!!

GUI添加到每个查询LIMIT 0,1000;后缀 :(

在命令行查看查询,并且工作正常。