Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Hapus catatan duplikat menggunakan rownum di sql

Gunakan rowid

DELETE FROM table_name a
 WHERE EXISTS( SELECT 1
                 FROM table_name b
                WHERE a.id = b.id
                  AND a.name = b.name
                  AND a.rowid > b.rowid )

Tentu saja, Anda dapat melakukan a.rowid < b.rowid demikian juga. rowid hanyalah alamat fisik baris sehingga tidak masalah apakah Anda menghapus baris yang memiliki alamat lebih besar atau lebih kecil.

Namun, hasil yang Anda harapkan tidak masuk akal.

Expected Result :

        ROWNUM         ID NAME
    ---------- ---------- ----------
             4          1 leo_1
             5          2 leo_2
             6          3 leo_3

rownum dari kumpulan hasil selalu ditetapkan pada waktu kueri. Itu berarti bahwa baris tertentu mungkin muncul dengan rownum yang berbeda nilai dalam kueri yang berbeda (atau saat kueri yang sama dijalankan beberapa kali). rownum selalu berurutan sehingga Anda tidak akan pernah memiliki rownum dari 4 dalam set hasil tanpa juga memiliki rownum nilai 1, 2, dan 3 dalam kumpulan hasil yang sama. Baris duplikat mana pun yang Anda hapus, hasilnya adalah

Hasil yang Diharapkan :

    ROWNUM         ID NAME
---------- ---------- ----------
         1          1 leo_1
         2          2 leo_2
         3          3 leo_3

Tapi rownum nilai bersifat arbitrer. Oracle akan sama validnya untuk kembali

Hasil yang Diharapkan :

    ROWNUM         ID NAME
---------- ---------- ----------
         1          2 leo_2
         2          3 leo_3
         3          1 leo_1


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah saya salah paham bergabung?

  2. Mengonversi String ke Tanggal dan memunculkan pengecualian saat String yang diberikan tidak valid

  3. Bagaimana saya bisa menerjemahkan ID ID FileNet di DB2/Oracle menjadi GUID yang ramah?

  4. SQL:bagaimana cara menggunakan UNION dan memesan dengan pilihan tertentu?

  5. Batasan Oracle Client Blob 10K dengan NHibernate dan Mono?