删除重复的行,需要在mysql中从所有行中保留一行

删除重复的行,需要在mysql中从所有行中保留一行,mysql,sql,sql-delete,Mysql,Sql,Sql Delete,我想删除基于两列的重复行,但需要保留其中的一行 重复行可以超过两行,如 ID NAME PHONE -- ---- ---- 1 NIL 1234 2 NIL 1234 3 NIL 1234 4 MES 5989 我想从上面3行中删除2行中的任意一行,保留1行 DELETE a FROM tableA a LEFT JOIN ( SELECT MIN(ID) ID, Name, Phone

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

重复行可以超过两行,如

ID  NAME PHONE
--  ---- ----
1   NIL  1234 
2   NIL  1234 
3   NIL  1234 
4   MES  5989
我想从上面3行中删除2行中的任意一行,保留1行

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
执行delete语句后,对列强制执行唯一约束,以便不能再次插入重复记录

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

而且设计也有缺陷。。。如果NIL 1234只出现一次,那么您应该将其作为主键,或者至少创建一个触发器来检查是否存在,以便数据库保持一致Hello Matt,我在mysql中使用了您的查询,例如从tablename中删除tablename,其中tablename.ID不在按名称从tablename组中选择MINID中,电话,但我得到以下错误,1093-您不能指定目标表'时区'更新从clause@Neel检查第二条评论:
DELETE
FROM Table
WHERE Table.id NOT IN  (  
    SELECT MIN(idTable) idtable
    FROM idTable
    GROUP BY name, phone)