码迷,mamicode.com
首页 > 数据库 > 详细

mysql uodate 报错 You can't specify target table '**' for update in FROM clause

时间:2019-03-05 11:26:36      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:中间   问题   技术   背景   oracle   use   avg   date   rom   

 You can‘t specify target table ‘sc‘ for update in FROM clause

背景:把“sc”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩; 

技术图片

上面的sql是我写的,执行就报这个错,这个原因说的是 不能从自己表里查数据再更新自己

解决方法:嵌套一层中间表

update sc set sc.score = 
(select t1.score from (select avg(sc1.score) score from sc sc1 where sc1.c_id=(select course.c_id from teacher,course where course.t_id=teacher.t_id and tname=叶平)) t1)
where sc.c_id = (select course.c_id from teacher,course where course.t_id=teacher.t_id and tname=叶平);

这种问题仅存在于mysql中,在Oracle中是不存在的,因此在此打个mark 以防下次又忘记了

mysql uodate 报错 You can't specify target table '**' for update in FROM clause

标签:中间   问题   技术   背景   oracle   use   avg   date   rom   

原文地址:https://www.cnblogs.com/zhaiyt/p/10475173.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!