Heim  >  Artikel  >  Datenbank  >  Warum schlägt MySQL fehl, wenn LIMIT in NOT IN-Unterabfragen verwendet wird?

Warum schlägt MySQL fehl, wenn LIMIT in NOT IN-Unterabfragen verwendet wird?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-16 00:54:03822Durchsuche

Why Does MySQL Fail When Using LIMIT in NOT IN Subqueries?

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!

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