Heim >Datenbank >MySQL-Tutorial >Wie lösche ich eine bestimmte Anzahl von Zeilen in absteigender Reihenfolge in MySQL mit Einschränkungen?
Löschen von Zeilen mit Einschränkungen in MySQL
Diese Frage untersucht die Verwendung der DELETE-Anweisung mit der LIMIT-Klausel in MySQL. Der Benutzer versucht, eine angegebene Anzahl von Zeilen in absteigender Reihenfolge nach Zeitstempelspalte zu löschen. Die Abfrage schlägt jedoch mit einem Syntaxfehler fehl.
Der Fehler entsteht, weil MySQL keine Offsets in der LIMIT-Klausel einer DELETE-Anweisung zulässt. Folglich kann die Abfrage nicht wie vorgesehen ausgeführt werden.
Um dieses Problem zu beheben, kann die Abfrage mit einem anderen Ansatz neu geschrieben werden. Die neu geschriebene Abfrage verwendet verschachtelte Unterabfragen, um die zu löschenden Zeilen basierend auf dem gewünschten Bereich auszuwählen.
DELETE FROM `chat_messages` WHERE `id` IN ( SELECT `id` FROM ( SELECT `id` FROM `chat_messages` ORDER BY `timestamp` DESC LIMIT 20, 50 ) AS `x` )
In dieser modifizierten Abfrage wählt eine verschachtelte Unterabfrage die ID-Werte der zu löschenden Zeilen aus. Die LIMIT-Klausel wird auf die innerste Unterabfrage angewendet, um die Ergebnismenge einzuschränken.
Da MySQL die Auswahl aus einer aktuell geänderten Tabelle verbietet, verwendet die Abfrage doppelte Verschachtelung, um diese Einschränkung zu umgehen. Die äußere Unterabfrage dient als temporäre Tabelle und ermöglicht es der innersten Unterabfrage, ID-Werte aus einem separaten Ergebnissatz auszuwählen.
Durch die Implementierung dieser Technik kann die Abfrage erfolgreich Zeilen innerhalb des angegebenen Bereichs löschen und dabei die Syntaxanforderungen von MySQL einhalten .
Das obige ist der detaillierte Inhalt vonWie lösche ich eine bestimmte Anzahl von Zeilen in absteigender Reihenfolge in MySQL mit Einschränkungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!