8

2つの列に基づいて重複する行を削除したいのですが、すべて1つの行を保持する必要があります。

重複する行は、次のように2行以上にすることができます。

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 に答える