delete/update表b时where后不能直接select
2019-10-22 本文已影响0人
酸甜柠檬26
练习:
image.png
第一次的写法如下:
delete from mianshi2 where 编号 not in(select min(编号) from mianshi2 group by 学号,姓名,课程编号,分数,课程名称);
后面的select子句会筛选出编号为1和2的学生信息,然后delete会把编号3删掉。
看上去逻辑正确,但是报错:You can't specify target table 'mianshi2' for update in FROM clause
原因:
在mysql中,同一个sql语句中,不能在同一个表中先select出符合条件的编号,然后再将同一个表中的此编号给delete或update,否则会报错。
改进:
将select出的编号放在一个表里(as a),然后多进行一次select,从表a中筛选出符合条件的编号,然后从原表里将此编号delete。
delete from mianshi2 where 编号 not in(select a.min_编号 from (select min(编号) as min_编号 from mianshi2 group by 学号,姓名,课程编号,分数,课程名称) as a);