Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memadam Semua kecuali Rekod N Terkini dalam MySQL Menggunakan Pertanyaan Tunggal?
Gunakan pertanyaan SQL untuk memadam semua rekod kecuali rekod N terkini
Dalam MySQL, adalah mungkin untuk memadamkan semua rekod dalam jadual kecuali rekod N terkini yang diisih mengikut ID menurun. Ini boleh dicapai menggunakan satu pertanyaan MySQL, walaupun tidak semudah yang dijangkakan.
Hanya gunakan pertanyaan seperti ini:
<code class="language-sql">delete from table order by id ASC limit ((select count(*) from table ) - N)</code>
akan gagal kerana nilai klausa LIMIT tidak boleh ditentukan menggunakan subkueri. Untuk mencapai ini, pertanyaan yang lebih kompleks diperlukan:
<code class="language-sql">DELETE FROM `table` WHERE id NOT IN ( SELECT id FROM ( SELECT id FROM `table` ORDER BY id DESC LIMIT N ) foo );</code>
Dalam pertanyaan ini, gunakan subkueri perantaraan untuk memilih ID rekod N terkini. Pertanyaan utama kemudian menggunakan subquery ini dalam operator NOT IN untuk mengecualikan rekod ini daripada proses pemadaman. Pendekatan ini membolehkan kami memintas had penggunaan subkueri secara langsung dalam klausa LIMIT atau dalam klausa FROM pertanyaan utama.
Perlu diingat bahawa subkueri perantaraan adalah penting. Tanpanya, kami akan menghadapi ralat yang berkaitan dengan merujuk jadual yang digugurkan dalam subkueri dan had yang dikenakan oleh versi MySQL terdahulu yang tidak menyokong penggunaan klausa LIMIT dalam subkueri yang digunakan dalam operator NOT IN.
Dengan menggunakan pertanyaan ini, anda boleh memadamkan semua rekod dalam jadual dengan berkesan kecuali rekod N terkini yang diisih mengikut lajur tertentu, memastikan data terkini dikekalkan.
Atas ialah kandungan terperinci Bagaimana untuk Memadam Semua kecuali Rekod N Terkini dalam MySQL Menggunakan Pertanyaan Tunggal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!