开发避坑指南(25):MySQL不支持带有limit语句的子查询的解决方案
异常信息
This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
错误语句
update t_order set create_time = '2024-09-02 12:00:00' where id in(SELECT id from t_order where create_time ='2024-09-01 12:00:00' limit 501500
)
mysql的版本是5.7
异常分析
该错误表明MySQL不支持带有limit语句的内层select语句,也就是无法在IN/ALL/ANY/SOME子查询中直接使用LIMIT子句。
解决办法
在子查询中多嵌套一层,如下:
update t_order set create_time = '2024-09-02 12:00:00' where id in(SELECT t.id from (SELECT id from t_order where create_time ='2024-09-01 12:00:00' limit 501500)t
)