(MySQL) NULL ordnen?
muenzchen
- datenbank
Hallo!
Ich habe folgendes Problem.
Ich bekomme durch ein LEFT JOIN manchmal als Zelleninhalt 'NULL' manchmal '1'. Auf jeden Fall bekomme ich ein Datum.
Nun ordne ich absteigend nach dem Datum und möchte aber zusätzlich, dass alle Datensätze mit einer '1' auch nach dem Datum geordnet zu oberst stehen, der Rest mit einer 'NULL' sollte darunter nach dem Datum geordnet sein.
Ist sowas möglich?
MfG, muenzchen
Hi muenzchen,
Nun ordne ich absteigend nach dem Datum und möchte aber zusätzlich, dass alle Datensätze mit einer '1' auch nach dem Datum geordnet zu oberst stehen, der Rest mit einer 'NULL' sollte darunter nach dem Datum geordnet sein.
Ist sowas möglich?
brauchst Du die NULL-Werte als Ergebnis? Welches RDBMS? Hat das eine Funktion zur automatischen Konvertierung von Werten in andere (dann sortierbare) Werte (ich habe "NVL" vage im Hinterkopf ...).
Viele Grüße
Michael
Hi muenzchen,
Nun ordne ich absteigend nach dem Datum und möchte aber zusätzlich, dass alle Datensätze mit einer '1' auch nach dem Datum geordnet zu oberst stehen, der Rest mit einer 'NULL' sollte darunter nach dem Datum geordnet sein.
Ist sowas möglich?brauchst Du die NULL-Werte als Ergebnis? Welches RDBMS? Hat das eine Funktion zur automatischen Konvertierung von Werten in andere (dann sortierbare) Werte (ich habe "NVL" vage im Hinterkopf ...).
Viele Grüße
Michael
Was ist RDBMS?
Die Felder, die auch NULL Werte enthalten können, brauche ich nicht für das Ergebnis, sondern nur zum ordnen.
Da beim LEFT JOIN es eben auch sein kann, dass mal ein Feld nicht gejoint werden kann, entstehen dadurch Felder mit NULL Werten, das kann man leider nicht umgehen.
Hi muenzchen,
Was ist RDBMS?
"relational data base management system" - also das, was oft fälschlicherweise "Datenbank" genannt wird.
"sql nvl" ist tatsächlich eine verheißungsvolle Google-Query in Deinem Fall, auch wenn die Lösung Deines Problems letztlich herstellerspezifisch ausfallen wird.
Viele Grüße
Michael
Hi muenzchen,
Was ist RDBMS?
"relational data base management system" - also das, was oft fälschlicherweise "Datenbank" genannt wird.
"sql nvl" ist tatsächlich eine verheißungsvolle Google-Query in Deinem Fall, auch wenn die Lösung Deines Problems letztlich herstellerspezifisch ausfallen wird.
Viele Grüße
Michael
Also von der Funkiton her könnte das NVL() das sein, was ich brauche.
Allerdings gibt es diesen Befehl in MySQL nicht.
Hi muenzchen,
Allerdings gibt es diesen Befehl in MySQL nicht.
syntaktisch oder semantisch? (Das war es, was ich mit "herstellerspezifisch" meinte.)
Viele Grüße
Michael
Hi muenzchen,
Allerdings gibt es diesen Befehl in MySQL nicht.
syntaktisch oder semantisch? (Das war es, was ich mit "herstellerspezifisch" meinte.)
Viele Grüße
Michael
Tja, wenn du mir die beiden Begriffe erklärst, kann ich dir vielleicht eine Antwort geben :)
Aber ich habs mittlerweile gelöst. Wenn ich zuerst absteigend nach dem Feld mit NULL oder 1 als Inhalt ordne, ordnet MySQL automatisch die NULLen nach unten.
Ich denke mal das dürfte eine recht offizielle Lösung sein.
Steht auch so in der Doku beschrieben.
Hi muenzchen,
Aber ich habs mittlerweile gelöst. Wenn ich zuerst absteigend nach dem Feld mit NULL oder 1 als Inhalt ordne, ordnet MySQL automatisch die NULLen nach unten.
Ich denke mal das dürfte eine recht offizielle Lösung sein.
Steht auch so in der Doku beschrieben.
der zweite (!) Treffer der von mir genannten Query enthält bereits in der Google-Preview explizit den Text: "in MySQL the name is IFNULL(), whereas in Oracle it is NVL()."
Und nein, "nvl" ist kein Befehl, sondern eine Funktion. Also hättest Du im mySQL-Kapitel über Funktionen nachlesen sollen.
Viele Grüße
Michael
Hallo Muenzchen!
select a, b from tabelle order by a, b;
In diesem Beispiel soll a das Feld sein, das auch NULL enthält, b ist das DATETIME-Feld. Ich glaube, dass MySQL defaultmäßig zuerst die '1' und danach die NULL sortiert - falls nicht, einfach
... order by a desc, b;
mfg
norbert =:-)