MySQL执行UPDATE语句报1093错误,同表SELECT查询更新如何解决
可行实现方案
方案1:嵌套子查询封装临时表
通过额外嵌套一层匿名临时表绕开MySQL同表更新的限制,写法和原逻辑差异最小:
UPDATE titles SET price = ( SELECT price FROM ( SELECT price FROM titles WHERE pubDate = (SELECT MAX(pubDate) FROM titles) LIMIT 1 ) AS temp ) WHERE titleID = 1001;
说明:
LIMIT 1用于处理多本书同时为最新出版的场景,避免子查询返回多行导致赋值报错。如果需要自定义多本最新书籍的价格取值规则,可以将内层SELECT price替换为SELECT MAX(price)/SELECT AVG(price)等聚合函数,同时可去掉LIMIT 1。
方案2:JOIN关联更新(执行效率更高)
通过内连接关联最新出版的书籍记录直接赋值,性能优于多层嵌套子查询:
UPDATE titles t_target INNER JOIN ( SELECT price FROM titles WHERE pubDate = (SELECT MAX(pubDate) FROM titles) LIMIT 1 ) t_newest SET t_target.price = t_newest.price WHERE t_target.titleID = 1001;
内容的提问来源于stack exchange,提问作者aemc
相关产品推荐
相关产品推荐

