Problem mit Order By in Zusammenspiel mit AS

Piano37

Neuer Benutzer
Beiträge
2
Hallo Zusammen,
inzwischen bin ich am Verzweifeln und frage deshalb hier einmal nach.

Ich habe folgende Abfrage:

Code:
Select BT, WW AS "Wasser"
From Bodentyp
ORDER BY "Wasser"

Diese Abfrage sortiert die Ausgabe nicht, sondern liest einfach den Inhalt der Tabelle.

Code:
Select BT, WW AS 'Wasser'
From Bodentyp
ORDER BY 'Wasser'

führt zur gleichen fehlerhaften Ausgabe.

Code:
Select BT, WW AS Wasser
From Bodentyp
ORDER BY Wasser

Diese Abfrage arbeitet korrekt.

Die Abfragenergebnisse sind in einem Client (HeidiSQL, MyManager) und auch auf der MySQL-Commandline von mir ausgeführt worden und führen immer zum gleichen Ergebnis.

Da ich Gelegentlich in der Lehre AS-Statements mit Lehrzeichen benutze z.B. AS "N in %" und man danach dann gern sortieren möchte, fände ich es prima, wenn diese Abfrage das richtige Ergebnis liefern würde.

Hat jemand eine Idee woran das liegen könnte. In früheren Versionen von MySQL ging es meines Wissens noch.

Aktuell benutze Version ist: 5.1.73 unter CentOS 6.5

Für Anregungen zur Fehlersuche bzw. -beseitgung wäre ich dankbar.

Viele Grüße

Uwe
 
Werbung:
Hat jemand eine Idee woran das liegen könnte. In früheren Versionen von MySQL ging es meines Wissens noch.

Bug in der Version? In MySQL?

In PG geht es:

Code:
test=*# select * from foo;
 c1 | c2
----+----
  1 |  1
  2 |  2
(2 rows)

test=*# select c1, c2 as "Wasser in %" from foo order by "Wasser in %" desc;
 c1 | Wasser in %
----+-------------
  2 |  2
  1 |  1
(2 rows)

test=*# select c1, c2 as "Wasser in %" from foo order by "Wasser in %" asc;
 c1 | Wasser in %
----+-------------
  1 |  1
  2 |  2
(2 rows)

Probier halt mal ne andere Version. Oder Datenbank.
 
Die Antwort ist doch ganz einfach. Sowohl "Anführungsstriche oben" als auch 'Strich oben' interpretiert MySQL wie die meisten SQL-DBs als Text und nicht als Spaltenbezeichnung. Sortierst du nach Text erhälst du entweder eine Fehlermeldung wie z.B. ungültiger Objektname in MSSQL oder eben eine sinnfreie Sortierung nach einem sich in keiner Zeile verändernden Wert, daher sinnfrei.

AS 'Wasser' ist hier korrekter Weise Text und vergibt somit einen Spaltenalias. Dieser Alias wird hier von ORDER BY toleriert und auch tatsächlich sinnvoll angewendet. Alternative wäre WW als Spaltenname.

Spaltennamen oder Aliase mit Leerschritten müssen immer in entsprechende Zeichen gesetzt werden, ich denke [] geht in allen SQL-Versionen, "" geht wohl nur in PG.
 
Hallo an alle und danke für die antworten.
Also mit dem Zeichen ` funktioniert es. Anscheinend habe ich das früher immer benutzt. Möglicherweise hat auch mein Client die Anführungszeichen übersetzt und es ging dadurch.
Wie dem auch sei, ich hatte keine Erinnerung daran.

Probiert habe auch [], aber dies geht nicht.
ukulele hat mit seiner Begründung recht, weil auch das nachfolgende Konstrukt funktioniert, obwohl es komisch aussieht.

Code:
SELECT BT, WW AS "Wasser pro"
FROM Bodentyp
ORDER BY `Wasser pro`

Danke für die Hilfe.
 
Werbung:
Hallo zusammen,

wo ist das Problem ??

MySQL macht da schon alles richtig.
Man muss halt nur richtig fragen :)

Code:
SELECT c1, c2 `wasserin %`
   FROM foo
  ORDER BY `wasserin %` DESC ;

Mit DESC oder ASC kannst du die Reihenfolge (absteigend,aufsteigend) angeben.

Dann stimmt auch dein Ergebnis.

3 3
2 2
1 1

Gruss

Bernd
 
Zurück
Oben