MySQL报错: > 1093 - You can’t specify target table ‘cinstance_objective’ for update
mysql插入语句中的子查询的表和insert的表不可以是同一张表
预期目标
原表中课程实例的课程目标存在order字段,在写插入语句时,要查出最大order数,进行max(order)+1操作,进行新数据的插入。
报错语句
INSERT INTO cinstance_objective ( id, cinstance_id, `NAME`, `ORDER` )
VALUES
( 0,1,'制定改进方案',
( SELECT
max( `order` )+ 1
FROM
cinstance_objective
WHERE
cinstance_id = 1));
原因是子查询中使用的是cinstance_objective 表,与insert语句中的表是同一张表,这在MySQL中是不允许的。
通过再嵌套一层子查询来规避这个错误。
可运行语句
INSERT INTO cinstance_objective ( id, cinstance_id, `NAME`, `ORDER` )
VALUES
( 0,1,'制定改进方案',
( SELECT
max( `order` )+ 1
FROM
( SELECT `order` FROM cinstance_objective WHERE cinstance_id = 1 ) AS m));
在update语句中同样存在这条规则