Beberapa pendekatan ini tampak sedikit rumit, dan saya biasanya melakukannya sebagai:
Tabel yang diberikan table
, ingin unik di (field1, field2) menjaga baris dengan max field3:
DELETE FROM table USING table alias
WHERE table.field1 = alias.field1 AND table.field2 = alias.field2 AND
table.max_field < alias.max_field
Misalnya, saya punya tabel, user_accounts
, dan saya ingin menambahkan batasan unik pada email, tetapi saya memiliki beberapa duplikat. Katakan juga bahwa saya ingin menyimpan yang terbaru (maks id di antara duplikat).
DELETE FROM user_accounts USING user_accounts ua2
WHERE user_accounts.email = ua2.email AND user_account.id < ua2.id;
- Catatan -
USING
bukan SQL standar, ini adalah ekstensi PostgreSQL (tetapi ekstensi yang sangat berguna), tetapi pertanyaan awal secara khusus menyebutkan PostgreSQL.