如何在MySQL的UPDATE语句中嵌套使用SELECT MAX(id)查询?
问题原因
MySQL 默认不允许在 UPDATE 操作的子查询中直接引用当前正在更新的同一张表,你写的原语句尝试在 WHERE 条件的子查询里直接查询 chatMessages 表的最大 id,触发了该限制,因此运行不生效。
可用解决方法
方法1:嵌套子查询生成临时表
通过额外嵌套一层子查询把最大id的结果包装为临时表,绕过同表更新的查询限制:
UPDATE `chatMessages` SET send = 'true' WHERE id = (SELECT max_id FROM (SELECT MAX(id) AS max_id FROM `chatMessages`) AS temp_table)
方法2:ORDER BY + LIMIT 写法(更推荐)
不需要写子查询,直接按id倒序排序后取第一条更新,逻辑和你要更新最大id对应行的需求完全匹配,写法更简洁、执行效率更高:
UPDATE `chatMessages` SET send = 'true' ORDER BY id DESC LIMIT 1
内容的提问来源于stack exchange,提问作者God of all wars
相关产品推荐
相关产品推荐

