You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行Insert语句通过select查询目标表数据插入行时报错如何解决

问题原因

该报错是MySQL的特有限制:对某张表执行INSERT/UPDATE/DELETE等写操作时,不能在同级的FROM子句中直接查询这同一张表,避免出现读写冲突。

解决方案

方案1:嵌套一层临时表封装子查询

MySQL不会识别嵌套两层的子查询为直接操作目标表,修改后的SQL如下:

insert into menu(title, routerlink, icon, hassubmenu, parentid, alignement) 
values(
    'Accès site', 
    '/pages/reporting/accessite', 
    'reorder', 
    0, 
    (select idmenu from (select idmenu from menu where title = 'Reporting' and parentid = 0) as temp), 
    0
);

原理是先把查询到的idmenu存入临时表temp中,外层再从临时表取数,避开直接从原表查询的限制。

方案2:用INSERT ... SELECT语法替代VALUES写法

直接把固定值和查询结果整合到SELECT语句中,不需要单独写子查询取值,写法更简洁:

insert into menu(title, routerlink, icon, hassubmenu, parentid, alignement) 
select 
    'Accès site', 
    '/pages/reporting/accessite', 
    'reorder', 
    0, 
    idmenu,
    0
from menu 
where title = 'Reporting' and parentid = 0;

如果担心匹配到多条数据,可以在WHERE条件后加LIMIT 1限制返回行数。

内容的提问来源于stack exchange,提问作者pheromix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 14:57:01