MySQL中执行sql语句错误 Error Code: > 1093 – You can‘t specify target table ‘cinstance_objective‘ for update

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语句中同样存在这条规则

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码

)">
< <上一篇
https://github.com/bytedance/Fastbot_Android

)">
下一篇>>