Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Problem mit Order By in Zusammenspiel mit AS

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von Piano37, 24 Juni 2014.

  1. Piano37

    Piano37 Neuer Benutzer

    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
     
  2. akretschmer

    akretschmer Datenbank-Guru

    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.
     
  3. ukulele

    ukulele Datenbank-Guru

    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.
     
    Walter gefällt das.
  4. akretschmer

    akretschmer Datenbank-Guru

    MySQL will doch die komischen ` oder sowas, oder?
     
  5. ukulele

    ukulele Datenbank-Guru

    Standard ist glaube ich ` aber [] könnte auch gehen, nehme ich jedenfalls in MSSQL.
     
  6. Piano37

    Piano37 Neuer Benutzer

    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.
     
  7. BerndB

    BerndB Datenbank-Guru

    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
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden