在 MySQL 表中保留一个副本并删除其余的 [重复]

Posted

技术标签:

【中文标题】在 MySQL 表中保留一个副本并删除其余的 [重复]【英文标题】:Keep one duplicate in MySQL table and delete the rest [duplicate] 【发布时间】:2016-02-12 19:14:24 【问题描述】:

我想通过删除任何额外的条目来使任何关于两列不唯一的 mysql 表条目唯一。假设我们在下面有 table_A。我只想保留一个条目,其中 col1 和 col2 与另一个条目的相同。 table_A 的示例结果如下面的 table_B 所示。

table_A

id | col1 | col2 | col3
-----------------------
1  |  a   |  3   |  4 
2  |  b   |  4   |  9
3  |  c   |  3   |  4
4  |  a   |  3   |  7
5  |  d   |  5   |  8
6  |  b   |  4   |  2
7  |  a   |  3   |  1
8  |  a   |  4   |  3

table_B

id | col1 | col2 | col3
-----------------------
1  |  a   |  3   |  4 
2  |  b   |  4   |  9
3  |  c   |  3   |  4
5  |  d   |  5   |  8
8  |  a   |  4   |  3

注意行

4  |  a   |  3   |  7
7  |  a   |  3   |  1
6  |  b   |  4   |  2

已被删除,因为存在类似的 col1, col2 条目对。

【问题讨论】:

***.com/questions/2630440/… 【参考方案1】:

也许只是在 DELETE 上使用连接,检查连接上的 id 更大:-

DELETE tab2
FROM table_a tab1
INNER JOIN table_a tab2
WHERE tab1.col1 = tab2.col1
AND tab1.col2 = tab2.col2
AND tab1.id < tab2.id

SQL 小提琴:-

http://www.sqlfiddle.com/#!9/3b300/1

【讨论】:

以上是关于在 MySQL 表中保留一个副本并删除其余的 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

MySQL删除重复数据只保留一条

删除一张表中重复数据并保留一条ID最小的记录

Laravel 数据库多对多(Mysql)或将 Json 保留在表中

MySql根据字段名查询重复记录并删除!只保留一条

仅拥有最新数据并从表中删除其余数据的有效方法

怎么删除ACCESS中的重复记录 只保留一条