CodeSky 代码之空

随手记录自己的学习过程

MySQL 子查询使用LIMIT

2016-09-07 10:20分类: SQL评论: 3

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

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

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

比如原句:

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

改为:

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

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

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

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

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

最后:ORM大法好!

评论 (2)

李国宝2016年10月27日 09:43

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

AAA2016年10月9日 21:56

最后一句亮了

敖天羽2016年10月9日 22:05

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