việc cho cả SQL NORMAL và PostgreSQL (cũng hoạt động trong AWS dịch chuyển đỏ)
DROP TABLE IF EXISTS backupOfTheTableContainingDuplicates;
CREATE TABLE aNewEmptyTemporaryOrBackupTable
AS SELECT DISTINCT * FROM originalTableContainingDuplicates;
TRUNCATE TABLE originalTableContainingDuplicates;
INSERT INTO originalTableContainingDuplicates SELECT * FROM
aNewEmptyTemporaryOrBackupTable ;
DROP TABLE aNewEmptyTemporaryOrBackupTable ;
GIẢI THÍCH TRÊN SQL SCRIPT
Vì vậy,
The 1st truy vấn đảm bảo, Nếu bạn có bất kỳ bảng sao lưu/tạm thời nào của bảng gốc chứa trong g bản sao sau đó đầu tiên thả bảng đó.
Truy vấn thứ hai, tạo bảng mới (Tạm thời/Sao lưu) với các mục nhập duy nhất trong Bảng gốc có chứa bản sao, vì vậy bảng tạm thời mới giống với bảng gốc MINUS mục trùng lặp.
Truy vấn thứ 3, cắt bớt hoặc làm trống bảng gốc.
Truy vấn thứ 4, chèn hoặc sao chép tất cả các mục nhập duy nhất trong bảng tạm thời vào bảng gốc đã bị cắt ngắn gần đây (Vì vậy, không có dữ liệu). Sau khi truy vấn này được thực hiện, Bảng gốc sẽ được điền dữ liệu UNIQUE trong bảng tạm thời.
Truy vấn thứ năm, xóa/xóa bảng tạm thời không cần thiết.
Vì vậy, Kết quả cuối cùng là, bảng gốc chỉ có ĐƠN VỊ UNIQUE và không trùng lặp.
Nguồn
2017-08-10 06:28:59
Hoàn hảo, cảm ơn! Tôi không biết về ctid –
Không sử dụng nó, nó quá chậm! –
Trong khi giải pháp này chắc chắn hoạt động, [giải pháp dưới đây] của @rapimo (https://stackoverflow.com/a/12963112/1156554) thực hiện nhanh hơn nhiều. Tôi tin rằng điều này đã làm với câu lệnh chọn bên trong ở đây được thực hiện N lần (cho tất cả N hàng trong bảng dupes) chứ không phải là nhóm đang diễn ra trong giải pháp khác. – David