Verwenden Sie eine SQL-Abfrage, um alle Datensätze außer den neuesten N Datensätzen zu löschen
In MySQL ist es möglich, alle Datensätze in einer Tabelle zu löschen, mit Ausnahme der neuesten N Datensätze, sortiert nach absteigender ID. Dies kann mit einer einzigen MySQL-Abfrage erreicht werden, wenn auch nicht so einfach wie erwartet.
Verwenden Sie einfach eine Abfrage wie diese:
<code class="language-sql">delete from table order by id ASC limit ((select count(*) from table ) - N)</code>
schlägt fehl, da der Wert der LIMIT-Klausel nicht mithilfe einer Unterabfrage angegeben werden kann. Um dies zu erreichen, ist eine komplexere Abfrage erforderlich:
<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>
Verwenden Sie in dieser Abfrage eine Zwischenunterabfrage, um die IDs der neuesten N Datensätze auszuwählen. Die Hauptabfrage verwendet diese Unterabfrage dann in einem NOT IN-Operator, um diese Datensätze vom Löschvorgang auszuschließen. Dieser Ansatz ermöglicht es uns, die Einschränkungen der Verwendung von Unterabfragen direkt in der LIMIT-Klausel oder in der FROM-Klausel der Hauptabfrage zu umgehen.
Es ist erwähnenswert, dass die Zwischenunterabfrage unerlässlich ist. Ohne sie kämen Fehler im Zusammenhang mit der Referenzierung der Tabelle, die in einer Unterabfrage gelöscht wurde, und Einschränkungen durch frühere Versionen von MySQL, die die Verwendung einer LIMIT-Klausel in einer Unterabfrage, die im NOT IN-Operator verwendet wird, nicht unterstützten.
Mit dieser Abfrage können Sie effektiv alle Datensätze in der Tabelle löschen, mit Ausnahme der neuesten N Datensätze, sortiert nach einer bestimmten Spalte, und so sicherstellen, dass die neuesten Daten erhalten bleiben.
Das obige ist der detaillierte Inhalt vonWie lösche ich alle bis auf die neuesten N-Datensätze in MySQL mit einer einzigen Abfrage?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!