SQL Server gibt Zeilen zurück, die nicht identisch sind & lt; & gt; auf einen Wert und NULL
Ich habe eine Tabelle, die eine Spalte mit Werten, kann rowTypeID = (1,2,3, oder null) . Ich möchte eine Abfrage schreiben, gibt jede Zeile, die nicht über einen Wert von 3. In diesem Beispiel möchte ich alle NULL-Zeilen zusammen mit allen 1,2 Zeilen ich möchte nur nicht, dass Zeilen mit dem Wert von 3
Set ANSI null ist, die zurzeit für die Datenbank.
Ich bin neugierig, warum ich nicht schreiben können
select * from myTable where myCol <> 3
Diese Abfrage keine Zeilen zurückgibt, die NULL-in der myCol Spalte
Muss ich schreiben
select * from my Table where myCol <> 3 or myCol Is NULL
Kann ich immer noch die NULL IST, oder kann ich es so einrichten, eine where-Klausel myCol <>3 die Rückgabe von Zeilen, die Null als Wert für meine Col
InformationsquelleAutor der Frage pehaada | 2010-12-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, dein Ansatz ist gut:
Da Sie Fragen nach alternativen, einen anderen Weg, es zu tun ist, um Ihre Spalte
NOT NULL
und speichern einer anderen (otherwised unbenutzt) - Wert in der Datenbank stattNULL
- zum Beispiel-1
. Dann wird der AusdruckmyCol <> 3
Stimmen Ihre fake-NULL
nur, wie es wäre, mit einem anderen Wert.Aber im Allgemeinen würde ich empfehlen nicht dieses Ansatzes. Die Art und Weise, die Sie bereits tun, es ist der richtige Weg.
Auch könnte es sich lohnen zu erwähnen, dass mehrere andere Datenbanken unterstützen
IS DISTINCT FROM
die genau das tut, was Sie wollen:MySQL hat die NULL-Sicheres gleichdie auch für diesen Zweck verwendet werden:
Leider SQL-Server noch nicht unterstützt, diese beiden Syntaxen.
InformationsquelleAutor der Antwort Mark Byers
Müssen Sie behandeln die Nullen die eine oder andere Weise, da die Ausdrücke mit
NULL
Unknown ausgewertet werden. Wenn Sie möchten, könnten Sie stattdessen tun:Aber dabei eine Magische Zahl (-1), und ist wohl weniger lesbar als die original-test für
IS NULL
.Edit: und, wie SQLMenace Punkte heraus, ist nicht SARGable.
InformationsquelleAutor der Antwort RedFilter
Immer, wenn Sie test für einen Wert alle Nullen werden weggelassen – nach all, sind Sie testen, ob der Wert in irgendeiner Spalte geht, bestimmte Kriterien und NULL ist nicht Wert.
InformationsquelleAutor der Antwort Joey
Du immerimmerimmer gehören
is null
.Weil 3 nicht gleich Nicht/Anwendbar ist und es nicht gleich Unbekannt.
InformationsquelleAutor der Antwort nate c
weil Sie nicht vergleichen können NULL auf etwas anderes, NULL ist nicht gleich NULL
InformationsquelleAutor der Antwort SQLMenace