PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Xóa các hàng trùng lặp khỏi bảng mà không có khóa duy nhất

Nếu bạn có đủ khả năng để viết lại toàn bộ bảng, đây có lẽ là cách tiếp cận đơn giản nhất:

WITH Deleted AS (
  DELETE FROM discogs.releases_labels
  RETURNING *
)
INSERT INTO discogs.releases_labels
SELECT DISTINCT * FROM Deleted

Nếu bạn cần nhắm mục tiêu cụ thể các bản ghi được sao chép, bạn có thể sử dụng ctid nội bộ trường xác định duy nhất một hàng:

DELETE FROM discogs.releases_labels
WHERE ctid NOT IN (
  SELECT MIN(ctid)
  FROM discogs.releases_labels
  GROUP BY label, release_id, catno
)

Hãy hết sức cẩn thận với ctid; nó thay đổi theo thời gian. Nhưng bạn có thể dựa vào việc nó giữ nguyên trong phạm vi của một câu lệnh duy nhất.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Trình tự PostgreSQL dựa trên một cột khác

  2. Cách viết VỚI (CTE) trong hàm trong PostgreSQL

  3. Làm cách nào để đặt một hàm PostgreSQL làm giá trị mặc định trong GORM?

  4. Làm thế nào để liên kết các vùng chứa docker trên bản dựng?

  5. Không thể xuất bảng AWS RDS Postgres sang CSV trong S3 bằng cách sử dụng hàm aws_s3.query_export_to_s3