删除数据库表中重复的记录
2012-05-09 19:15
232 查看
有时候,我们会在平时的工作中碰到如下的问题:
在一个数据表开始的时候,由于考虑的不完全,可能主键配置没有做好,可能在表中出现如下的重复数据
+------+-------+------+
| id | name | age |
+------+-------+------+
| 1 | jason | 23 |
| 2 | jason | 23 |
| 3 | jason | 23 |
| 4 | alex | 24 |
| 5 | alex | 24 |
+------+-------+------+
现在当我们希望去掉重复的姓名数据得到如下的结果
+------+-------+------+
| id | name | age |
+------+-------+------+
| 3 | jason | 23 |
| 5 | alex | 24 |
+------+-------+------+
开始写出了如下的一句SQL DELETE FROM TB_NAME WHERE id NOT IN (SELECT MAX(id) FROM TB_NAME GROUP BY name);
但是执行之后我们会发现如下错误:ERROR 1093 (HY000): You can't specify target table 'demo1' for update in FROM clause
后来换了一种写法,可以解决这个问题
DELETE FROM TB_NAME WHERE id NOT IN (SELECT id FROM (SELECT MAX(id) AS ID FROM TB_NAME GROUP BY name) AS TMP);
在一个数据表开始的时候,由于考虑的不完全,可能主键配置没有做好,可能在表中出现如下的重复数据
+------+-------+------+
| id | name | age |
+------+-------+------+
| 1 | jason | 23 |
| 2 | jason | 23 |
| 3 | jason | 23 |
| 4 | alex | 24 |
| 5 | alex | 24 |
+------+-------+------+
现在当我们希望去掉重复的姓名数据得到如下的结果
+------+-------+------+
| id | name | age |
+------+-------+------+
| 3 | jason | 23 |
| 5 | alex | 24 |
+------+-------+------+
开始写出了如下的一句SQL DELETE FROM TB_NAME WHERE id NOT IN (SELECT MAX(id) FROM TB_NAME GROUP BY name);
但是执行之后我们会发现如下错误:ERROR 1093 (HY000): You can't specify target table 'demo1' for update in FROM clause
后来换了一种写法,可以解决这个问题
DELETE FROM TB_NAME WHERE id NOT IN (SELECT id FROM (SELECT MAX(id) AS ID FROM TB_NAME GROUP BY name) AS TMP);
相关文章推荐
- 如何删除数据库中重复的记录
- 数据库表中有重复记录,如何删除这些重复记录保留ID最大的一个信息
- [转帖]记录:删除数据库中重复数据的几个方法
- 删除数据库中重复记录(添加自己的理解)
- 数据库SQL server 删除一张表中的重复记录
- SQL查询或删除数据库中重复记录
- 删除数据库中重复记录的SQL语句
- 如何删除数据库中的重复记录
- 删除数据库表中的重复冗余记录,以及随机取N条数据的方法
- 数据库SQL server 删除一张表中的重复记录
- 删除数据库重复记录
- 删除数据库中重复的记录
- 常用删除数据库重复记录方法
- 删除数据库重复的记录
- 删除数据库表中重复记录方法分享
- 千万级数据库(MSSQL)删除重复记录
- 删除数据库中多余的重复记录(在mysql的数据库上测试过,成功删除)
- 关于如何删除数据库中重复记录
- 删除数据库重复记录
- 数据库中查找重复记录和删除重复记录的sql