MySQL 子查询使用LIMIT

昨天在帮受泽写一句查询的时候才发现MySQL在子查询中是无法直接使用Limit的,不仅低版本没法用,官方手册表明连最新版(5.7)依旧不能用:

https://dev.mysql.com/doc/refman/5.7/en/subquery-restrictions.html

当然,实在想要搞也是可以的,在子查询里再嵌套一层就行了。

比如原句:

select * from table where id in (select id from table limit 10);

改为:

select * from table where id in (select t.id from (select * from table limit 10)as t)

当然那么问题来了,有些句子我们是不是可以改成JOIN,改成JOIN效率哪个高呢?

在我的印象中(也就是上课的时候教科书上写的),从理论上,嵌套查询优于连接查询,当然实际情况下,我找了一下StackOverflow的讨论,具体问题还是要具体分析,有的时候方便是一回事,数据量也是决定因素等等……

http://stackoverflow.com/questions/2577174/join-vs-sub-query

当然在某些实现上,SQL Server确实比起MySQL方便那么一点点吧,至少不用为嵌套LIMIT烦恼。

最后:ORM大法好!

标签: 知识, 代码段, 语法, mysql

已有 3 条评论

  1. AAA

    最后一句亮了

    1. 谢谢 顺手发现了一个错别字2333

  2. 没记错,MySQL子查询是没有引擎优化的...

添加新评论