Heim >Datenbank >MySQL-Tutorial >Warum funktioniert meine „ORDER BY'-Klausel in einer MySQL/MariaDB-Unterabfrage nicht mehr?

Warum funktioniert meine „ORDER BY'-Klausel in einer MySQL/MariaDB-Unterabfrage nicht mehr?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-03 16:22:42171Durchsuche

Why Does My `ORDER BY` Clause in a MySQL/MariaDB Subquery No Longer Work?

MySQL/MariaDB: Verhalten von ORDER BY in Unterabfragen ändern

Betrachten Sie die folgende Abfrage, die zuvor erfolgreich in MySQL 5.5 verwendet wurde:

SELECT t2.Code from (select Country.Code from Country order by Country.Code desc ) AS t2;

In neueren Versionen von MySQL (einschließlich MariaDB 10.0.14) gibt es diese Abfrage nicht mehr Sortiert die Ergebnisse wie erwartet in absteigender Reihenfolge. Diese Verhaltensänderung hat Bedenken hinsichtlich eines möglichen Fehlers geweckt.

Die Untersuchung hat jedoch bestätigt, dass diese Änderung beabsichtigt war und nicht als Fehler angesehen wird. MariaDB hat dieses Verhalten dokumentiert und erklärt, dass eine Unterabfrage einen ungeordneten Satz von Zeilen zurückgibt und dass die ORDER BY-Klausel in der Unterabfrage ignoriert werden kann.

Um die gewünschte Reihenfolge sicherzustellen, wird empfohlen, die ORDER BY-Klausel anzuwenden zur äußersten Abfrage oder fügen Sie bei Bedarf eine LIMIT-Klausel zur Unterabfrage hinzu:

SELECT t2.Code 
FROM (
  SELECT Country.Code FROM Country ORDER BY Country.Code DESC LIMIT 2
) AS t2;

Diese überarbeitete Abfrage wendet die Sortierung korrekt an und erzeugt das gewünschte Ergebnis Ergebnisse.

Beachten Sie, dass diese Verhaltensänderung laut Kommentaren zum ursprünglichen Fehlerbericht auch für MySQL 5.6 gilt. Entwickler sollten sich dieser Änderung bewusst sein und ihre Abfragen entsprechend anpassen, um das gewünschte Sortierverhalten beizubehalten.

Das obige ist der detaillierte Inhalt vonWarum funktioniert meine „ORDER BY'-Klausel in einer MySQL/MariaDB-Unterabfrage nicht mehr?. 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