Heim > Datenbank > MySQL-Tutorial > Warum ignoriert meine MariaDB-Unterabfrage „ORDER BY' ohne „LIMIT'?

Warum ignoriert meine MariaDB-Unterabfrage „ORDER BY' ohne „LIMIT'?

Barbara Streisand
Freigeben: 2024-12-30 18:41:09
Original
195 Leute haben es durchsucht

Why Does My MariaDB Subquery Ignore `ORDER BY` Without `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;
Nach dem Login kopieren

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;
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage