MySQL-子查询中具有LIMIT/ORDER BY的奇怪行为

MySQL-子查询中具有LIMIT/ORDER BY的奇怪行为,mysql,Mysql,我面临一个奇怪的问题: =>返回20行 =>返回10行 如您所见,这两个查询之间的唯一区别是第一个子查询中的“orderby” 这是一只虫子还是我遗漏了什么 更多资讯: > SHOW VARIABLES LIKE "%version%"; innodb_version 5.6.16 protocol_version 10 slave_type_conversions version 5.6.1

我面临一个奇怪的问题:


=>返回20行


=>返回10行


如您所见,这两个查询之间的唯一区别是第一个子查询中的“orderby”

这是一只虫子还是我遗漏了什么

更多资讯:

> SHOW VARIABLES LIKE "%version%";
innodb_version              5.6.16
protocol_version            10
slave_type_conversions  
version                     5.6.16
version_comment             MySQL Community Server (GPL)
version_compile_machine     x86_64
version_compile_os          Win64

这是由于一个简单的错误:

交换了
订单依据
限额

(
    select id from myTable1 ORDER BY id limit 10
)
union
(
    select id from myTable2 limit 10
)
=>返回20行


正如评论中所建议的,最好使用
UNION ALL
,但我的2个数据集没有共同的数据。

看起来是在按顺序排序时使用UNION消除重复行。。改为尝试
union all
。在第二个查询中,两个子查询返回相同的10行并删除重复的行。使用
UNION ALL
保存它们。此外,您不需要外部
SELECT
s;表1中的ID从10000开始,表2中的ID从1开始,没有重复的(我还是要试试)@Apolo。每个表中也可能有重复项。当删除重复项时,查询恰好找到10个不同的值。@axiac RE:您的建议让我找到了解决方案,我发布了一个答案,我没有注意到
ORDER BY
LIMIT
子句被交换。它不应该触发一个错误吗?有趣的是,
select id from myTable1 limit 10 ORDER BY id
会触发错误,但当它被包含在
select*from(…)t1
中时,它不会触发错误,但也不会返回任何行:-(
> SHOW VARIABLES LIKE "%version%";
innodb_version              5.6.16
protocol_version            10
slave_type_conversions  
version                     5.6.16
version_comment             MySQL Community Server (GPL)
version_compile_machine     x86_64
version_compile_os          Win64
(
    select id from myTable1 ORDER BY id limit 10
)
union
(
    select id from myTable2 limit 10
)