Erhalte null == null in SQL
Wünsche ich Suche eine Datenbank-Tabelle auf eine null-Spalte. Manchmal ist der Wert, den ich bin Suche, ist selbst NULL. Da ist Null gleich nichts, auch NULL, sagen
where MYCOLUMN=SEARCHVALUE
fehl. Jetzt habe ich zu dem Mittel greifen müssen
where ((MYCOLUMN=SEARCHVALUE) OR (MYCOLUMN is NULL and SEARCHVALUE is NULL))
Gibt es eine einfachere Möglichkeit zu sagen, dass?
(Ich bin mit Oracle, falls jene Gegenstände)
InformationsquelleAutor der Frage James Curran | 2008-10-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die IsNull oder NVL-Zeug, aber es geht einfach um den Motor machen mehr Arbeit. Sie werden den Aufruf von Funktionen zu tun, Spalte conversions und dann die Ergebnisse verglichen.
Verwenden, was Sie haben
InformationsquelleAutor der Antwort Andy Lester
@Andy Lester behauptet, dass die ursprüngliche form der Abfrage ist effizienter als die Verwendung von NVL. Ich beschloss zu testen, dass die Aussage:
War ich etwas überrascht, wie richtig Sie mit Andy ist. Es kostet fast 50% mehr zu tun, die NVL-Lösung. Also, auch wenn ein Stück code, das sieht vielleicht nicht so aufgeräumt, oder elegant wie ein anderer, könnte es erheblich effizienter. Ich lief diese Prozedur mehrmals, und die Ergebnisse waren fast die gleichen jeder Zeit. Großes Lob an Andy...
InformationsquelleAutor der Antwort DCookie
In Expert Oracle Database Architecture ich sah:
InformationsquelleAutor der Antwort Peter Meinl
Ich weiß nicht, ob es einfacher, aber ich habe gelegentlich verwendet
Ersetzen "-1" mit einem Wert, der gültig ist für die Spalte Typ, aber auch nicht wahrscheinlich tatsächlich finden sich in den Daten.
HINWEIS: ich benutze MS SQL, nicht Oracle, also nicht sicher, ob "ISNULL" ist gültig.
InformationsquelleAutor der Antwort Chris Shaffer
Verwenden NVL zu ersetzen, die null mit einigen dummy-Wert auf beiden Seiten, wie in:
InformationsquelleAutor der Antwort JosephStyons
Andere alternative, die wahrscheinlich optimal von der ausgeführten query Sicht, und wird nur sinnvoll sein, wenn Sie tun, eine Art von query-generation zu generieren, die genaue Abfrage, die Sie benötigen, basierend auf die Suche Wert.
Pseudocode folgt.
InformationsquelleAutor der Antwort Vinko Vrsalovic
Wenn eine out-of-band-Wert ist möglich:
InformationsquelleAutor der Antwort Ted
Diese können auch den job in Oracle.
Gibt es einige Situationen, in denen es besser ist als das NULL-test mit der ODER.
War ich auch überrascht, das DEKODIEREN, können Sie prüfen, ob NULL gegen NULL.
InformationsquelleAutor der Antwort EvilTeach
Versuchen
InformationsquelleAutor der Antwort DCookie
Ich würde denken, dass das, was Sie haben, ist OK. Könnten Sie vielleicht gebrauchen:
InformationsquelleAutor der Antwort Carl
Dies ist eine situation, in der wir uns befinden, in eine Menge mit unserer Oracle-Funktionen, die Fahrt berichten. Wir zulassen möchten, dass Benutzer einen Wert eingeben, der zum einschränken der Ergebnisse oder lassen Sie es leer, um alle Datensätze zurück. Dies ist, was ich verwendet habe und es hat funktioniert gut für uns.
InformationsquelleAutor der Antwort Jason Winger