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

Nee*_*eel 6 mysql sql sql-delete

我想删除基于两列的重复行,但需要保留所有行的1行.

重复行可以超过两行,如,

ID  NAME PHONE
--  ---- ----
1   NIL  1234 
2   NIL  1234 
3   NIL  1234 
4   MES  5989
Run Code Online (Sandbox Code Playgroud)

我想从3以上删除2行中的任意一行并保留1行.

Joh*_*Woo 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
Run Code Online (Sandbox Code Playgroud)

执行delete语句后,对列强制执行唯一约束,以便不能再次插入重复记录,

ALTER TABLE TableA ADD CONSTRAINT tb_uq UNIQUE (Name, Phone)
Run Code Online (Sandbox Code Playgroud)