首页 > 数据库开发 > MySQL > MySQL嵌套查询“LIMIT & IN/ALL/ANY/SOME”错误解决方法
2019
03-23

MySQL嵌套查询“LIMIT & IN/ALL/ANY/SOME”错误解决方法

MySQL嵌套查询“LIMIT & IN/ALL/ANY/SOME”错误解决方法 - 第1张  | 逗分享开发经验

我们都知道,现在很多完善的用户系统都会提供登录记录功能,而且在之前的公安备案交互式网站的时候就发现,这些功能也都是里面的一些要求,而我们这次升级也注定要完善这个功能,那么用户的登录记录就必须做好控制,否则数据库就会无限制的增加,用户的登录记录也就变得无限制的增加,从而造成数据库的冗余和不必要的浪费,所以选择用MySQL的嵌套语句和 not in 来保留最新的 100 条或者 1000 条登录记录。

其中就遇到了一个问题:

delete table where uid='6'and id NOT IN ( select id from table where uid='6' order by id desc LIMIT 3)

执行该条语句的时候会出现:This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery' 的错误提示。也就是说 MySQL 不支持 limit,所以就想到绕开一下,把这个嵌套再来一层,这样似乎就完美解决了,例如:

delete from table where uid='6'and id NOT IN (select x.id from ( select id from table where uid='6' order by id desc LIMIT 3) as x)

看上去虽然变得好像负责了一点点,但是重点解决的问题,还算不错吧,同时在网上看到有人有更简单的方法,就是把限制条件放到 from 而非 where 子句中,就不必出现嵌套再嵌套。

select * from (select id from table limit 12) as foo;

但似乎这个方法并不太适用于这个场景,所以这里分享出来给大家一个学习参考,可以用在其它的地方或者场景还是极其不错的。

最后编辑:
作者:小雅
这个作者貌似有点懒,什么都没有留下。

留下一个回复

你的email不会被公开。