2つの列に基づいて重複する行を削除したいのですが、すべて1つの行を保持する必要があります。
重複する行は、次のように2行以上にすることができます。
ID NAME PHONE
-- ---- ----
1 NIL 1234
2 NIL 1234
3 NIL 1234
4 MES 5989
上記の3行から2行のいずれかを削除し、1行を保持したいと思います。
2つの列に基づいて重複する行を削除したいのですが、すべて1つの行を保持する必要があります。
重複する行は、次のように2行以上にすることができます。
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
削除ステートメントを実行した後、重複するレコードを再度挿入できないように、列に一意の制約を適用します。
ALTER TABLE TableA ADD CONSTRAINT tb_uq UNIQUE (Name, Phone)
DELETE
FROM Table
WHERE Table.id NOT IN (
SELECT MIN(idTable) idtable
FROM idTable
GROUP BY name, phone)