NULL-Werte in where-Klausel

8

Ich habe einen Tisch "bla" wie folgt:

%Vor%

wenn ich die SQL-Abfrage

mache %Vor%

Ich bekomme nur den Datensatz mit der ID 2. Ich bekomme den Datensatz mit ID 3 nicht, wo fk null ist. Ich dachte NULL! = 4. Scheint, dass das falsch ist.

Warum ist das so?

    
caspermc 26.07.2011, 08:02
quelle

6 Antworten

25

NULL vergleicht nichts mit allem. Sie müssen Nullen explizit akzeptieren:

%Vor%

Weitere Informationen zu NULL finden Sie unter Arbeiten mit NULL . Handhabung.

    
Mat 26.07.2011, 08:04
quelle
4

Weil NULL für UNKNOWN steht, und wenn Sie einen Wert mit UNKNOWN vergleichen, wird das Ergebnis immer falsch sein.

Sehen Sie sich diese Vergleiche an -

%Vor%

Wenn Sie die Datensätze mit NULL abrufen möchten, müssen Sie Ihre Abfrage auf diese Weise neu schreiben -

%Vor%

Weitere Informationen finden Sie unter Wikipedia .

    
MD Sayem Ahmed 26.07.2011 08:04
quelle
2

NULL ist insofern besonders, als es einen "unbekannten" Wert darstellt. Dies kann nicht mit Zahlen (oder irgendeinem anderen Wert für diese Angelegenheit) verglichen werden, daher das Ergebnis -

Ist NULL & lt; & gt; 4? Die Antwort ist - weiß es nicht. Ist 4 von einem unbekannten Wert verschieden?

Versuchen Sie es stattdessen:

%Vor%     
Oded 26.07.2011 08:05
quelle
2

NULL ist kein Wert, sondern die unbekannte Abwesenheit eines Wertes. Wenn Sie auf NULL testen möchten, müssen Sie dies explizit tun, indem Sie IS NULL und IS NOT NULL verwenden. Zum Beispiel wird NULL FALSE selbst gegen NULL selbst testen. Also, Arbeiten mit NULL erfolgt nur mit den oben genannten Funktionen (und %Code%). Ihre Abfrage könnte als

umgeschrieben werden %Vor%     
Naltharial 26.07.2011 08:06
quelle
1

Wie wäre es mit

? %Vor%

Logik:

%Vor%     
AlexanderMP 26.07.2011 08:09
quelle
0

Folgende Aussage sollte helfen:

SELECT * FROM bla WHERE KOALESSE (fk, 0) & lt; & gt; 4

    
Srikanth Kattam 12.12.2016 07:28
quelle

Tags und Links