8

我想删除基于两列的重复行,但需要全部保留 1 行。

重复的行可以多于两行,例如,

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

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

4

2 回答 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)
于 2013-03-21T13:17:05.857 回答
1
DELETE
FROM Table
WHERE Table.id NOT IN  (  
    SELECT MIN(idTable) idtable
    FROM idTable
    GROUP BY name, phone)
于 2013-03-21T13:18:34.727 回答