MySQL报错1235不支持LIMIT搭配IN子查询的UPDATE语句如何改写
MySQL 1235报错UPDATE语句改写方案
报错原因
你遇到的SQL Error (1235)报错是MySQL的固有语法限制:不支持在IN/ALL/ANY/SOME类型的子查询中直接使用LIMIT语法。
你的原SQL逻辑是要更新id_card表中,code值匹配%922846%且version最高的对应记录的division_category为678,可以通过以下两种方式改写:
改写方案1:子查询外层嵌套临时表(和原逻辑完全一致)
给内层带LIMIT的子查询多套一层临时表查询,即可绕开语法限制:
UPDATE id_card SET division_category='678' WHERE CODE IN ( -- 额外套一层子查询生成临时表,绕过LIMIT限制 SELECT t.code FROM ( SELECT code FROM id_card WHERE CODE LIKE '%922846%' ORDER BY version DESC LIMIT 1 ) AS t );
改写方案2:关联更新(性能更优,推荐使用)
用JOIN关联子查询结果的方式实现更新,执行效率更高:
UPDATE id_card a INNER JOIN ( SELECT code FROM id_card WHERE CODE LIKE '%922846%' ORDER BY version DESC LIMIT 1 ) b ON a.CODE = b.CODE SET a.division_category='678';
内容的提问来源于stack exchange,提问作者Yogus
相关产品推荐
相关产品推荐

