猿问

删除所有重复行,只删除MySQL中的一个行?

删除所有重复行,只删除MySQL中的一个行?

如何删除MySQL表中的所有重复数据?


例如,使用以下数据:


SELECT * FROM names;


+----+--------+

| id | name   |

+----+--------+

| 1  | google |

| 2  | yahoo  |

| 3  | msn    |

| 4  | google |

| 5  | google |

| 6  | yahoo  |

+----+--------+

我会用SELECT DISTINCT name FROM names;如果是SELECT查询。


我该怎么做DELETE只删除副本而只保留一条记录?


回首忆惘然
浏览 637回答 2
2回答

慕妹3242003

如果您想保持行的最低id价值:DELETE FROM NAMES WHERE id NOT IN (SELECT *                      FROM (SELECT MIN(n.id)                             FROM NAMES n                        GROUP BY n.name) x)如果你想id最高值:DELETE FROM NAMES WHERE id NOT IN (SELECT *                      FROM (SELECT MAX(n.id)                             FROM NAMES n                        GROUP BY n.name) x)子查询中的子查询对于MySQL是必要的,否则您将得到一个1093错误。
随时随地看视频慕课网APP
我要回答