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

xem tất cả dữ liệu cho các hàng trùng lặp trong oracle

Bạn luôn có thể sử dụng GROUP BY / HAVING truy vấn trong mệnh đề IN. Điều này hoạt động và tương đối đơn giản nhưng nó có thể không hiệu quả đặc biệt nếu số lượng hàng trùng lặp là tương đối lớn.

SELECT *
  FROM table1
 WHERE (name, type_id) IN (SELECT name, type_id
                             FROM table1
                            GROUP BY name, type_id
                           HAVING COUNT(*) > 1)

Nói chung sẽ hiệu quả hơn nếu sử dụng các hàm phân tích để tránh va chạm vào bảng lần thứ hai.

SELECT *
  FROM (SELECT id, 
               name,
               type_id,
               code,
               lat,
               long,
               count(*) over (partition by name, type_id) cnt
          FROM table1)
 WHERE cnt > 1

Tùy thuộc vào những gì bạn định làm với dữ liệu và có thể có bao nhiêu bản sao của một hàng cụ thể, bạn cũng có thể muốn tham gia table1 với chính nó để lấy dữ liệu trong một hàng duy nhất

SELECT a.name,
       a.type_id,
       a.id,
       b.id,
       a.code,
       b.code,
       a.lat,
       b.lat,
       a.long,
       b.long
  FROM table1 a
       JOIN table1 b ON (a.name = b.name AND
                         a.type_id = b.type_id AND
                         a.rowid > b.rowid)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle ORA-01031:không đủ đặc quyền khi tạo người dùng

  2. Các khóa chính và chỉ mục trong ngôn ngữ truy vấn Hive có khả dụng hay không?

  3. Tạo một biểu mẫu Apex với nhiều trang

  4. Tình huống nào khiến các gói Oracle trở nên không hợp lệ?

  5. Cài đặt Oracle Fusion Middleware / WebLogic Server 11g