MySQL - 使用LIMIT / ORDER BY的子查询中的奇怪行为

时间:2015-02-27 11:01:33

标签: mysql

我遇到了一个奇怪的问题:


select * from (
    select id from myTable1 limit 10
) t1
union
select * from (
    select id from myTable2 limit 10
) t2

=> Return 20 rows


select * from (
    select id from myTable1 limit 10 ORDER BY id
) t1
union
select * from (
    select id from myTable2 limit 10
) t2

=> Return 10 rows


正如您所看到的,这两个查询之间的唯一区别是"顺序为"在第一个子查询中。

这是一个错误还是我错过了什么?

更多信息:

> 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

1 个答案:

答案 0 :(得分:1)

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

交换了ORDER BYLIMIT

(
    select id from myTable1 ORDER BY id limit 10
)
union
(
    select id from myTable2 limit 10
)

=> return 20 rows

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