MySQL中删除重复行并保留其中一个的方法

8

我希望删除基于两列的重复行,但需要保留其中一行。

重复行可能超过两行,例如:

ID  NAME PHONE
--  ---- ----
1   NIL  1234 
2   NIL  1234 
3   NIL  1234 
4   MES  5989

我想要从以上三行中删除任意2行,保留1行。

此外,设计存在缺陷...如果NIL 1234只应出现一次,则应将其作为主键或至少创建一个触发器来检查其存在性,以使您的数据库保持一致。 - ITroubs
2个回答

18
DELETE  a
FROM    tableA a
        LEFT JOIN
        (
            SELECT MIN(ID) ID, Name, Phone
            FROM    TableA
            GROUP   BY Name, Phone
        ) b ON  a.ID = b.ID AND
                a.NAme = b.Name AND
                a.Phone = b.Phone
WHERE   b.ID IS NULL

在执行删除语句后,对该列强制执行唯一约束条件,以防止再次插入重复记录。

ALTER TABLE TableA ADD CONSTRAINT tb_uq UNIQUE (Name, Phone)

1
DELETE
FROM Table
WHERE Table.id NOT IN  (  
    SELECT MIN(idTable) idtable
    FROM idTable
    GROUP BY name, phone)

你好Matt,我在mysql中使用了你的查询,如下所示:DELETE FROM tablename WHERE tablename.ID NOT IN ( SELECT MIN(ID) FROM tablename GROUP BY NAME, PHONE)但是我遇到了以下错误:#1093 - 无法在FROM子句中更新目标表'timezone' - Neel
@Neel 请查看第二条评论:https://dev59.com/D2025IYBdhLWcg3wZ1Ny#6025387 - SepehrM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接