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
)