美文网首页
delete/update表b时where后不能直接select

delete/update表b时where后不能直接select

作者: 酸甜柠檬26 | 来源:发表于2019-10-22 15:46 被阅读0次

练习:


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);

相关文章

网友评论

      本文标题:delete/update表b时where后不能直接select

      本文链接:https://www.haomeiwen.com/subject/mlbqvctx.html