das or is null sparen
-
folgendes Statement
select * from tabelle where textfeld <> 'kartoffelsack'
filtert neben den Einträgen mit 'kartoffelsack' auch diejenigen heraus, bei denen textfeld null ist.
In SQL wäre das ganz einfach zu lösen
select * from tabelle where textfeld <> 'kartoffelsack' or textfeld is null
Jetzt programmiere ich hier aber einen Editor, wo die where-clause aus einzelnen Bausteinen zusammengesetzt wird. Da ist es nicht ganz einfach immer das or zusätzlich hinzuzufügen. Gibts irgendwie ne andere Möglichkeit das textfeld <> 'kartoffelsack' durch eine einzelne Zeile zu ersetzen, die auch die null-Werte erlaubt. Also irgendwie
where textfeld <isNullOrNot> 'kartoffelsack'
-
kartoffelsack schrieb:
Jetzt programmiere ich hier aber einen Editor, wo die where-clause aus einzelnen Bausteinen zusammengesetzt wird. Da ist es nicht ganz einfach immer das or zusätzlich hinzuzufügen.
Wo ist da das Problem?
Du musst den Ausdruck nur richtig klammern.select * from tabelle where (textfeld <> 'kartoffelsack' or textfeld is null)
kartoffelsack schrieb:
Gibts irgendwie ne andere Möglichkeit das textfeld <> 'kartoffelsack' durch eine einzelne Zeile zu ersetzen, die auch die null-Werte erlaubt. Also irgendwie
where textfeld <isNullOrNot> 'kartoffelsack'
Nicht das ich wüsste.
-
in mysql gibts IFNULL(), vielleicht passt das ja
-
Wo ist da das Problem?
Du musst den Ausdruck nur richtig klammern.soll ich Dir den Code posten, den ich brauche, um richtig zu klammern?
Wie gesagt: ich kann nicht einfach das SQL hinschreiben, das wird aus der Kombination mehrerer Bausteine generiert.
-
coalesce könnte da wahrscheinlich helfen..
select * from tabelle
where coalesce(textfeld,'') <> 'kartoffelsack';wenn dein dbms das hat...
http://www.postgresql.org/docs/7.1/static/functions-conditional.html
bei oracle
heißt es glaube ich nvl..jenz
-
jenz schrieb:
coalesce könnte da wahrscheinlich helfen..
select * from tabelle
where coalesce(textfeld,'') <> 'kartoffelsack';wenn dein dbms das hat...
http://www.postgresql.org/docs/7.1/static/functions-conditional.html
bei oracle
heißt es glaube ich nvl..jenz
Ja, stimmt.
select * from tabelle where nlv(textfeld, ' ') <> 'kartoffelsack';
Man beachte das Leerzeichen. '' wird evtl. als NULL interpretiert...
-
Danke
-
Ich weiss nicht wie es bei deiner DB ist, bei DB2 ist es so, dass der Optimizier bei Spalten die per COALESCE abgefragt werden den Index nicht mehr benutzt.
Ist vielleicht eine überprüfung wert, spätestesn wenn die Performance in den Keller geht.
-
frenki schrieb:
Ich weiss nicht wie es bei deiner DB ist, bei DB2 ist es so, dass der Optimizier bei Spalten die per COALESCE abgefragt werden den Index nicht mehr benutzt.
Ist vielleicht eine überprüfung wert, spätestesn wenn die Performance in den Keller geht.
Guter Hinweis.
btw, Oder-Bedingungen können die selbe Auswirkung haben.