博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL中You can't specify target table '表名'('sn_app_label') for update in FROM clause错误解决办法...
阅读量:6087 次
发布时间:2019-06-20

本文共 1255 字,大约阅读时间需要 4 分钟。

在有些时候有级联关系的数据放在了同一张表中,在写sql语句的时候可能会遇到这样的场景:我要插入两条数据,第一条是父节点,第二条是子节点,关联关系是父节点的自增长id;在写这样的sql语句时有可能就会出现You can't specify target table '表名' for update in FROM clause这种错误,意思就是:“不能先select出同一表中的某些值,再update这个表(在同一语句中)。”产生这个错误的sql如下:

INSERT INTO sn_app_label (app_code,apply_id,apply_name,level_id,parent_id,state,operation_time)VALUES('CS001' ,'G001','门店属性标签','0' ,'','0','2018-06-15 00:00:00');INSERT INTO sn_app_label (app_code, apply_id, apply_name, level_id, parent_id , state, operation_time) VALUES ('CS001', '001', '门店类型', '0',  (SELECT auto_id FROM sn_app_label WHERE app_code = 'CS001' AND apply_id = 'G001')  , '0', '2018-06-15 00:00:00');

 

sql错误位置为:

 

解决方法:既然不能在同一张表中,那么就使用中间表,即先select出所需要的字段auto_id,把auto_id放到一个中间表中,再从中间表中取出这auto_id;

正确sql如下

INSERT INTO sn_app_label (app_code,apply_id,apply_name,level_id,parent_id,state,operation_time)VALUES('CS001' ,'G001','门店属性标签','0' ,'','0','2018-06-15 00:00:00');INSERT INTO sn_app_label (app_code, apply_id, apply_name, level_id, parent_id , state, operation_time) VALUES ('CS001', '001', '门店类型', '0', (SELECT a.auto_id FROM(SELECT auto_id FROM sn_app_label WHERE app_code = 'CS001' AND apply_id = 'G001')a), '0', '2018-06-15 00:00:00');

错误位置修改为:

注:以上只针对MySQL

 

转载于:https://www.cnblogs.com/seedling/p/9216497.html

你可能感兴趣的文章
MySql.Data.dll的版本
查看>>
Linux系统磁盘管理
查看>>
hdu 2191 (多重背包+二进制优化)
查看>>
home.php
查看>>
neo4j---删除关系和节点
查看>>
redis分布式锁redisson
查看>>
什么样的企业可以称之为初创企业?
查看>>
Python爬虫之BeautifulSoup
查看>>
《HTML 5与CSS 3权威指南(第3版·下册)》——第20章 使用选择器在页面中插入内容...
查看>>
如何判断自己适不适合做程序员?这几个特点了解一下
查看>>
newinstance()和new有什么区别
查看>>
android下载封装类
查看>>
[node] 用 node-webkit 开发桌面应用
查看>>
Nginx访问控制和虚拟主机
查看>>
report widget not working for external users
查看>>
windows phone 摄像头得到图片是旋转90°
查看>>
Linux--sed使用
查看>>
没有显示器的情况下安装和使用树莓派
查看>>
【android】使用handler更新UI
查看>>
mochiweb 源码阅读(十五)
查看>>