乍一看这是两个等于查询:
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的值。
答案 0 :(得分:1)
这两个查询将返回相同的行,但不一定按相同的顺序。
UNION会为您重复删除结果,因此无论SELECT顺序如何,DISTINCT都不执行任何操作,结果集的大小也相同。
适合您测试的唯一解释是在两者的运行之间插入了更多数据。
答案 1 :(得分:0)
你是对的!
我陷入了与SQLYog终极GUI界面v11.11 BUG-feacher的阴险陷阱!!!
GUI添加到每个查询LIMIT 0,1000;后缀 :(
在命令行查看查询,并且工作正常。