
表:
+--------+---------+------+---------------+------------+----------+
| id | xuehao | name | kechengid | kecheng | fenshu |
+------+-----------+------+---------------+------------+-----------+
| 1 | 2005001 | 张三 | 1 | 数学 | 69 |
| 2 | 2005002 | 李四 | 1 | 数学 | 89 |
| 3 | 2005001 | 张三 | 1 | 数学 | 69 |
+------+------------+------+---------------+------------+----------+
需求就是删除除了id 之外,其余信息全部相同的冗余记录。
当时的思路即使先求出这些冗余的信息的一个最小id,只要这一条记录,不是最小id的记录删除就可以了。因此当时使用了这样的语句:
delete from tb02 where id not in (select min(id) from tb02 group by xuehao, name, kechengid, kecheng, fenshu)
结果就报错:
ERROR 1093 (HY000): You can't specify target table 'tb02' for update in FROM clause。
后来到网上搜索,原来是因为 在mysql中,不支持先 select 一个表的记录,在按此条件进行更新和删除同一个表的记录。
解决办法是,将select得到的结果,再通过中间表select一遍,这样就可以规避错误,这个问题只出现于mysql。oracle 并不会出现。
修改后的语句:
delete from tb02 where id not in (select t.id from (select min(id) as id from tb02 group by xuehao,name,kechengid,kecheng,fenshu ) t)
这样就顺利的删除了除了id 其余全部冗余的数据。
每天前进一小步,或许可以和乌龟一样长寿!
你好,很高兴回答你的问题。你截图中的这个命令是 *** 作系统的,和mysql没有关系。应该是环境变量设置有问题。
你搜一下“netstat 环境变量”,按照搜到的结果设置环境变量再执行命令。
如果有帮助到你,请点击采纳。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)