ERROR 1093 (HY000): You can't specify target table 'student2' for update in FROM clause问题解决

在做mysql嵌套子查询删除时,出现如题错误。mysql语句如下:

delete from student2 where id not in (select id from student2 group by no,name,coursename,courseno,score);

流程梳理一下:

表结构:

mysql> desc student2;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| id         | int(11)     | YES  |     | NULL    |       |
| no         | varchar(7)  | YES  |     | NULL    |       |
| name       | varchar(20) | YES  |     | NULL    |       |
| courseno   | varchar(4)  | YES  |     | NULL    |       |
| coursename | varchar(10) | YES  |     | NULL    |       |
| score      | int(11)     | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
6 rows in set

mysql> 

数据:

mysql> select * from student2;
+----+---------+------+----------+------------+-------+
| id | no      | name | courseno | coursename | score |
+----+---------+------+----------+------------+-------+
|  1 | 2015001 | 张三 | 001      | 数学       |    69 |
|  2 | 2015002 | 李四 | 001      | 数学       |    89 |
|  3 | 2015001 | 张三 | 001      | 数学       |    69 |
+----+---------+------+----------+------------+-------+
3 rows in set

操作:删除表中除ID不同,其他信息相同的学生冗余信息。

结果:ERROR 1093 (HY000): You can't specify target table 'student2' for update in FROM clause

原因:在mysql中,不能通过嵌套子查询来直接删除或者修改记录,需要通过别名来指定嵌套子查询作为一个临时表。

解决办法:给嵌套子查询的结果取一个别名,然后从这个表中再次查询出记录,然后再做删除或者修改操作。

delete from student2 where id not in 

(select a.id from 

(select id from student2 group by no,name,coursename,courseno,score)

 a);

操作结果:

mysql> delete from student2 where id not in (select a.id from (select id from student2 gro
up by no,name,coursename,courseno,score) a);
Query OK, 0 rows affected (0.00 sec)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luffy5459

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值