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

时间:2013-03-21 13:15:26

标签: mysql sql sql-delete

我想根据两列删除重复的行,但需要保留所有行的一行。

重复行可以超过两行,如

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

我想从3以上删除任意2行并保留1行。

2 个答案:

答案 0 :(得分:16)

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)

答案 1 :(得分:1)

DELETE
FROM Table
WHERE Table.id NOT IN  (  
    SELECT MIN(idTable) idtable
    FROM idTable
    GROUP BY name, phone)
相关问题