Heim  >  Artikel  >  Datenbank  >  **Warum verursacht MySQL DELETE mit LIMIT und Offset einen Fehler?**

**Warum verursacht MySQL DELETE mit LIMIT und Offset einen Fehler?**

Susan Sarandon
Susan SarandonOriginal
2024-10-25 11:21:02211Durchsuche

**Why does MySQL DELETE with LIMIT and Offset Cause an Error?**

Bei der Verwendung der MySQL-DELETE-Anweisung mit LIMIT ist ein Fehler aufgetreten

Problem:

Beim Versuch Wenn Sie mithilfe einer MySQL-DELETE-Anweisung mit einer LIMIT-Klausel Zeilen aus einer Tabelle löschen, tritt beim Offsetwert in der LIMIT-Klausel ein Fehler auf. Die folgende Abfrage veranschaulicht das Problem:

DELETE FROM `chat_messages` ORDER BY `timestamp` DESC LIMIT 20, 50;

Die beim Offsetwert (50) empfangene Fehlermeldung lautet:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' 50' at line 1

Lösung:

Der Fehler tritt auf, weil MySQL die Angabe eines Offsets in der LIMIT-Klausel einer DELETE-Anweisung nicht zulässt. Folglich müssen wir auf einen alternativen Ansatz zurückgreifen, um das gewünschte Ergebnis zu erzielen.

Um bestimmte Zeilen aus einer Tabelle basierend auf einem Bereich zu löschen, können wir eine Unterabfrage verwenden, die in der Hauptabfrage DELETE verschachtelt ist. Die folgende modifizierte Abfrage demonstriert diese Technik:

<code class="sql">DELETE FROM `chat_messages` 
WHERE `id` IN (
    SELECT `id` FROM (
        SELECT `id` FROM `chat_messages`
        ORDER BY `timestamp` DESC
        LIMIT 20, 50
    ) AS `x`
)</code>

In dieser Abfrage ruft die Unterabfrage innerhalb der IN-Klausel die IDs der zu löschenden Zeilen basierend auf dem angegebenen Bereich ab. Angenommen, die Tabelle verfügt über eine Primärschlüsselspalte namens „id“, können wir diese verwenden, um jede Zeile eindeutig zu identifizieren.

Hinweis: Es ist wichtig, eine doppelte Verschachtelung zu implementieren, um Probleme mit der fehlenden Auswahlmöglichkeit von MySQL zu vermeiden aktuell geänderte Tabellen.

Das obige ist der detaillierte Inhalt von**Warum verursacht MySQL DELETE mit LIMIT und Offset einen Fehler?**. 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