Heim > Datenbank > MySQL-Tutorial > Wie lösche ich alle bis auf die neuesten N-Datensätze in MySQL mit einer einzigen Abfrage?

Wie lösche ich alle bis auf die neuesten N-Datensätze in MySQL mit einer einzigen Abfrage?

Barbara Streisand
Freigeben: 2025-01-08 16:26:41
Original
919 Leute haben es durchsucht

How to Delete All but the Latest N Records in MySQL Using a Single Query?

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage