Một số cách tiếp cận này có vẻ hơi phức tạp và tôi thường làm như sau:
Đã cho bảng table
, muốn duy nhất nó trên (field1, field2) giữ hàng có trường max3:
DELETE FROM table USING table alias
WHERE table.field1 = alias.field1 AND table.field2 = alias.field2 AND
table.max_field < alias.max_field
Ví dụ:tôi có một bảng, user_accounts
và tôi muốn thêm một ràng buộc duy nhất cho email, nhưng tôi có một số bản sao. Cũng nói rằng tôi muốn giữ một cái được tạo gần đây nhất (id tối đa trong số các bản sao).
DELETE FROM user_accounts USING user_accounts ua2
WHERE user_accounts.email = ua2.email AND user_account.id < ua2.id;
- Lưu ý -
USING
không phải là SQL tiêu chuẩn, nó là một phần mở rộng PostgreSQL (nhưng rất hữu ích), nhưng câu hỏi ban đầu đề cập cụ thể đến PostgreSQL.