In MySQL-Versionen vor 5.5 berücksichtigten Unterabfragen die darin enthaltene ORDER BY-Klausel. Dieses Verhalten hat sich jedoch in neueren Versionen, einschließlich MariaDB 10.0.14, geändert.
Beim Ausführen der folgenden Abfrage in MariaDB 10.0.14:
SELECT t2.Code from (select Country.Code from Country order by Country.Code desc ) AS t2;
Die Ergebnisse werden nun in aufsteigender Reihenfolge (oder in natürlicher Reihenfolge) sortiert, im Gegensatz zur erwarteten absteigenden Reihenfolge bestellen.
Nach Prüfung der Dokumentation von MariaDB wird das beobachtete Verhalten nicht als Fehler angesehen. Gemäß dem SQL-Standard sind Tabellen und Unterabfragen ungeordnete Zeilenmengen. Daher kann es sein, dass der Optimierer die ORDER BY-Klausel in der Unterabfrage ignoriert.
Um eine konsistente Reihenfolge der Ergebnisse sicherzustellen, wird empfohlen, die ORDER BY-Klausel auf die äußere Abfrage anzuwenden :
SELECT t2.Code from (select Country.Code from Country) AS t2 ORDER BY t2.Code DESC;
Alternativ kann die Verwendung einer LIMIT-Klausel innerhalb der Unterabfrage auch dazu führen, dass ORDER BY aktiviert wird angewendet:
SELECT t2.Code from (select Country.Code from Country ORDER BY Country.Code DESC LIMIT 2) AS t2;
Während spezifische Tests derzeit nicht verfügbar sind, deuten Kommentare zum Fehlerbericht darauf hin, dass MySQL 5.6 möglicherweise auch das gleiche Verhalten wie MariaDB 10.0.14 zeigt, ignoriert die ORDER BY-Klausel in Unterabfragen.
Das obige ist der detaillierte Inhalt vonWarum scheint die ORDER BY-Klausel meiner MariaDB-Unterabfrage ignoriert zu werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!