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

Hapus semua catatan kecuali yang terbaru?

DELETE FROM student
WHERE ApplicationDateTime <> (SELECT max(ApplicationDateTime) 
                              FROM student s2
                              WHERE s2.StudentID  = student.StudentID)

Mengingat diskusi panjang di komentar, harap perhatikan hal berikut:

Pernyataan di atas akan bekerja pada database apa pun yang menerapkan konsistensi baca tingkat pernyataan dengan benar terlepas dari perubahan apa pun pada tabel saat pernyataan sedang berjalan.

Basis data tempat saya pasti tahu bahwa ini berfungsi dengan benar bahkan dengan modifikasi bersamaan ke tabel:Oracle (yang tentang pertanyaan ini), Postgres, SAP HANA, Firebird (dan kemungkinan besar MySQL menggunakan InnoDB). Karena semuanya menjamin tampilan data yang konsisten pada saat pernyataan dimulai. Mengubah <> ke <> tidak akan mengubah apa pun untuk mereka (termasuk Oracle tentang pertanyaan ini)

Untuk database yang disebutkan di atas, pernyataannya tidak tunduk pada tingkat isolasi karena pembacaan phantom atau pembacaan yang tidak dapat diulang hanya dapat terjadi antara beberapa pernyataan - tidak dalam tunggal penyataan.

Untuk database yang tidak mengimplementasikan MVCC dengan benar dan bergantung pada penguncian untuk mengelola konkurensi (sehingga memblokir akses tulis bersamaan) ini mungkin benar-benar menghasilkan hasil yang salah jika tabel diperbarui secara bersamaan. Bagi mereka solusinya menggunakan <> mungkin dibutuhkan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Membandingkan dengan tanggal di Oracle sql

  2. 3 Cara Memformat Angka menjadi 2 Tempat Desimal di Oracle

  3. URL Oracle yang ditentukan tidak valid:OracleDataSource.makeURL

  4. ORA-01461:dapat mengikat nilai PANJANG hanya untuk dimasukkan ke dalam kolom PANJANG - Terjadi saat kueri

  5. bagaimana mengganti huruf beraksen di kolom varchar2 di oracle