MySQL课程练习中题目遇到Mysql update语句赋值嵌套select
语句如下:
update tc_sc set score=(select avg(tc_sc.score) from tc_sc,tb_teacher,tb_course where tc_sc.cid=tb_course.cid and tb_course.tid=tb_teacher.tid and tb_teacher.tname='fp') where cid=(select tc_sc.cid from tb_teacher,tb_course,tc_sc where tc_sc.cid=tb_course.cid and tb_course.tid=tb_teacher.tid and tb_teacher.tname='fp' group by tc_sc.cid);
出现问题:
ERROR 1093 (HY000): You can't specify target table 'tc_sc' for update in FROM clause
查询问题原因在于mysql 定义update语句不能同时对同一张进行set 赋值操作,也就是说 update a 的时候 不能在后面select col from a ,如果是不同表操作是没有问题的。
最后的解决方案是通过别名避免同表的问题:
update tc_sc set score=(select avg(tc_sc.score) from (select * from tc_sc) as temp1,tb_teacher,tb_course where tc_sc.cid=tb_course.cid and tb_course.tid=tb_teacher.tid and tb_teacher.tname='fp') where cid=(select tc_sc.cid from tb_teacher,tb_course,(select * from tc_sc) as temp2 where tc_sc.cid=tb_course.cid and tb_course.tid=tb_teacher.tid and tb_teacher.tname='fp' group by tc_sc.cid);
注意其中的这两句
(select * from tc_sc) as temp1
(select * from tc_sc) as temp2
是避免问题的关键。