MySQL删除重复的行,保留其中一行

时间:2022-06-01 18:33:34

示例
有这样一个表

CREATE TABLE `tests` (
 `id` int(11) DEFAULT NULL,
 `name` varchar(20) DEFAULT NULL
) ;

现在需要删除重复name的行,但保留其中一行。

方法一:

保留id小的一行

DELETE n1 FROM tests n1, tests n2 WHERE n1.id > n2.id AND n1.name = n2.name

保留id大的一行

DELETE n1 FROM tests n1, tests n2 WHERE n1.id < n2.id AND n1.name = n2.name

方法二

对于数据量大的表,使用删除的方法可能会很慢,可以使用插入临时表的方法:

INSERT INTO tempTests(id,name)
    SELECT DISTINCT id,name
    FROM tests;