LIMIT in NOT IN-Unterabfragen: MySQL-Einschränkungen
Bei der Arbeit mit MySQL kann es zu Einschränkungen bei der Verwendung von Unterabfragen innerhalb von LIMIT-Klauseln kommen. Ein häufiges Problem tritt auf, wenn versucht wird, Datensätze zu löschen, die nicht in einem bestimmten Bereich enthalten sind.
Angenommen, Sie möchten Beiträge löschen, die nicht zu den letzten 15 gehören. Ein naiver Ansatz könnte die folgende Abfrage beinhalten:
DELETE FROM posts WHERE id NOT IN (SELECT id FROM posts ORDER BY timestamp DESC LIMIT 0, 15);
Diese Abfrage wird jedoch wahrscheinlich fehlschlagen und eine Fehlermeldung wie „MySQL unterstützt die Unterabfrage LIMIT & IN/ALL/ANY/SOME noch nicht“ zurückgeben.
Das Problem wird behoben Einschränkung
Um diese Einschränkung zu überwinden, können Sie einen Workaround anwenden, indem Sie die Unterabfrage in eine andere Unterabfrage einschließen:
DELETE FROM posts WHERE id NOT IN (SELECT * FROM ( SELECT id FROM posts ORDER BY timestamp DESC LIMIT 0, 15 ) AS t);
In dieser modifizierten Abfrage die Unterabfrage, die die letzten 15 Beiträge auswählt wird ein Alias „t“ zugewiesen und dann verwendet die äußere Unterabfrage den Alias, um die ausgeschlossenen IDs abzurufen. Das Ergebnis ist eine gültige Abfrage, die die gewünschte Löschung bewirken sollte.
Das obige ist der detaillierte Inhalt vonWarum schlägt MySQL fehl, wenn LIMIT in NOT IN-Unterabfragen verwendet wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!