Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Kueri SQL:Hapus semua catatan dari tabel kecuali N terbaru?

Anda tidak dapat menghapus catatan dengan cara itu, masalah utamanya adalah Anda tidak dapat menggunakan subkueri untuk menentukan nilai klausa LIMIT.

Ini berfungsi (diuji di MySQL 5.0.67):

DELETE FROM `table`
WHERE id NOT IN (
  SELECT id
  FROM (
    SELECT id
    FROM `table`
    ORDER BY id DESC
    LIMIT 42 -- keep this many records
  ) foo
);

Subkueri perantara adalah diperlukan. Tanpanya, kami akan mengalami dua kesalahan:

  1. Kesalahan SQL (1093):Anda tidak dapat menentukan 'tabel' target untuk pembaruan dalam klausa FROM - MySQL tidak mengizinkan Anda untuk merujuk ke tabel yang Anda hapus dari dalam subkueri langsung.
  2. Kesalahan SQL (1235):Versi MySQL ini belum mendukung 'LIMIT &IN/ALL/ANY/SOME subquery' - Anda tidak dapat menggunakan klausa LIMIT dalam subkueri langsung dari operator NOT IN.

Untungnya, menggunakan subkueri perantara memungkinkan kami melewati kedua batasan ini.

Nicole telah menunjukkan bahwa kueri ini dapat dioptimalkan secara signifikan untuk kasus penggunaan tertentu (seperti yang ini). Saya sarankan membaca jawaban itu juga untuk melihat apakah itu cocok untuk Anda.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Terhubung ke mysql di Amazon EC2 dari server jauh

  2. Pemodelan Varian Produk

  3. Bagaimana cara mendapatkan banyak hitungan dengan satu kueri SQL?

  4. Cara mengimpor file XML ke tabel database MySQL menggunakan XML_LOAD(); fungsi

  5. Cara membuat kenaikan otomatis kunci utama tabel MySQL dengan beberapa awalan