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

Kiểm tra các hàng trùng lặp hoàn chỉnh trong một bảng lớn

Để tìm xem có bất kỳ hoàn toàn trùng lặp tồn tại (giống hệt nhau trên tất cả các cột), đây có lẽ là cách nhanh nhất:

SELECT EXISTS (
    SELECT 1
    FROM   tbl t
    NATURAL JOIN tbl t1 
    WHERE  t.ctid <> t1.ctid
    )

THAM GIA TỰ NHIÊN là cách viết tắt rất thuận tiện cho trường hợp này vì (trích dẫn hướng dẫn tại đây ):

TỒN TẠI có lẽ là nhanh nhất, vì Postgres ngừng tìm kiếm ngay khi tìm thấy bản sao đầu tiên. Vì hầu hết bạn có thể không có chỉ mục bao gồm toàn bộ hàng và bảng của bạn rất lớn, điều này sẽ giúp bạn tiết kiệm rất nhiều của thời gian.

Lưu ý rằng NULL không bao giờ được coi là giống với một NULL khác . Nếu bạn có NULL và coi chúng giống hệt nhau, bạn phải làm nhiều việc hơn.

ctid là một cột hệ thống có thể (ab-) được sử dụng làm khóa chính đặc biệt, nhưng không thể thay thế khóa chính thực tế do người dùng xác định về lâu dài.

Phiên bản 8.1 lỗi thời dường như không có <> toán tử được xác định cho một ctid . Thử truyền sang văn bản :

SELECT EXISTS (
    SELECT 1
    FROM   tbl t
    NATURAL JOIN tbl t1 
    WHERE  t.ctid::text <> t1.ctid::text
    )


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. GORM tạo bản ghi có thể đã tồn tại

  2. PostgreSQL:xuất dữ liệu kết quả từ truy vấn SQL sang Excel / CSV

  3. Vấn đề với việc xóa một hàng khỏi cơ sở dữ liệu là gì?

  4. Làm cách nào để đặt tham số String [] cho một truy vấn gốc?

  5. tệp đầu vào dường như là một kết xuất định dạng văn bản. Vui lòng sử dụng psql