Wenn ein Feld leer ist, nimm ein anderes

Jakob

Jakob

Aktives Mitglied
Thread Starter
Dabei seit
05.01.2004
Beiträge
1.070
Reaktionspunkte
21
Hallo,

kann man in MySQL oder allgemein in SQL sagen, dass wenn in einer Spalte das Feld leer ist oder einen bestimmten Wert aufweist, er eine andere Spalte auswerten soll?

Also sowas:

SELECT feld1 (if(feld1=="") then feld2) from tabelle;
 
Man kann sich das in SQL sicherlich zusammenbauen: SELECT IF(LENGTH(feld1) > 0, feld1, feld2) .... Aber ehrlich gesagt, wenn das nötig ist, dann ist während der Normalisierung der DB etwas falsch gelaufen.

Pingu

PS: Bei solchen Sachen hilft auch gerne das Handbuch weiter: http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html
 
@Jakob: Ich weiss nicht, wofür Du genau diese Funktionalität brauchst aber wäre es nicht eine mögliche Lösung, die Abfrage in einer while (...) {...} Schleife durchlaufen zu lassen und dann erst bei der Ausgabe auf leere Werte zu reagieren? Im Allgemeinen fragt man doch sowieso alle Felder ab...

Nunja, kann ja sein, dass Du etwas ganz anderes machen willst.

2nd
 
Danke für den If-Tipp, auch wenn das wohl doch nicht funktioniert. Ich les mich noch bisschen ein.

Zwischendurch hab ich es so wie 2nd gemacht. Ich dachte nur, dass es sinnvoller ist, gleich die DB zu beauftragen, adäquate Spalten auszusuchen.

Und ich verbiete mir jegliches Nörgeln an meinen Normalisierungskünsten!
 
Für Nullvalue-Überprüfungen gibt es eigentlich bei jeder vernünftigen RDBMS eine entsprechende Funktion, die man benutzen sollte, anstatt sowas selbst auszuprogrammieren.

Bei mySQL müsste es folgenderweise gehen:

SELECT IFNULL(feld1,feld2) FROM ...

Wenn Feld1 einen Nullwert aufweist, wird Feld2 als Wert genommen und ausgewiesen.
 
...und wenn's keine nullvalues sind, die in der entsprechenden Spalte gespeichert sind, gibt es so ein lustiges CASE ... WHEN ... THEN, was man in ein Statement basteln kann.

Das sieht dann so aus:

SELECT
CASE case_value
WHEN when_value THEN statement_list
[WHEN when_value THEN statement_list] ...
[ELSE statement_list]
END CASE AS columnname
FROM
tablename
 
Zurück
Oben Unten