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大法好!
植入部分
如果您觉得文章不错,可以通过赞助支持我。
如果您不希望打赏,也可以通过关闭广告屏蔽插件的形式帮助网站运作。
最后一句亮了
谢谢 顺手发现了一个错别字2333
没记错,MySQL子查询是没有引擎优化的...