Heim >Datenbank >MySQL-Tutorial >Warum ignoriert meine MariaDB-Unterabfrage „ORDER BY' ohne „LIMIT'?
Verhalten von MySQL/MariaDB-Unterabfragen ORDER BY
In MySQL-Versionen vor 5.5 wurde die ORDER BY-Klausel innerhalb einer Unterabfrage wie erwartet angewendet. In neueren Versionen von MariaDB (z. B. 10.0.14) wird die ORDER BY-Klausel jedoch nicht in Unterabfragen angewendet, wenn keine LIMIT-Klausel angegeben ist.
Fehler oder Verhaltensänderung?
Nach der Untersuchung dieses Problems wurde bestätigt, dass dieses Verhalten beabsichtigt und kein Fehler ist. MariaDB folgt dem SQL-Standard, der keine bestimmte Reihenfolge für Zeilen innerhalb von Unterabfragen erfordert. Daher wird die ORDER BY-Klausel in Unterabfragen ignoriert.
Dokumentiertes Verhalten
Laut MariaDB-Dokumentation wird empfohlen, die ORDER BY-Klausel auf die äußerste Abfrage oder anzuwenden Fügen Sie eine LIMIT-Klausel hinzu, um die Reihenfolge innerhalb der zu erzwingen Unterabfrage.
Beispiel
Die folgende Abfrage zeigt den Unterschied im Verhalten:
SELECT t2.Code FROM ( SELECT Country.Code FROM Country ORDER BY Country.Code DESC ) AS t2;
Ohne eine LIMIT-Klausel wendet MariaDB die ORDER nicht an BY-Klausel innerhalb der Unterabfrage, was zu einem ungeordneten Ergebnis führt. Um die absteigende Reihenfolge zu erzwingen, kann eine LIMIT-Klausel hinzugefügt werden:
SELECT t2.Code FROM ( SELECT Country.Code FROM Country ORDER BY Country.Code DESC LIMIT 2 ) AS t2;
Durch Hinzufügen der LIMIT-Klausel wird die ORDER BY-Klausel innerhalb der Unterabfrage angewendet, was zu einem korrekt absteigenden Ergebnis führt.
Hinweis
Es ist wichtig zu beachten, dass diese Verhaltensänderung auch MySQL-Versionen nach 5.5 betreffen kann. Konsultieren Sie immer die offizielle Dokumentation oder die Versionshinweise, um das spezifische Verhalten der von Ihnen verwendeten Version zu bestätigen.
Das obige ist der detaillierte Inhalt vonWarum ignoriert meine MariaDB-Unterabfrage „ORDER BY' ohne „LIMIT'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!