Heim  >  Artikel  >  Datenbank  >  Wie lösche ich eine bestimmte Anzahl von Zeilen in absteigender Reihenfolge in MySQL mit Einschränkungen?

Wie lösche ich eine bestimmte Anzahl von Zeilen in absteigender Reihenfolge in MySQL mit Einschränkungen?

DDD
DDDOriginal
2024-10-28 11:54:41502Durchsuche

How to Delete a Specific Number of Rows in Descending Order in MySQL with Restrictions?

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!

Stellungnahme:
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