2016-08-05 21 views
1

Ich sehe hier einen Thread: Why does PostgreSQL not return null values when the condition is <> true mit Antworten, die erklären warum es passiert, aber ich bin mir immer noch nicht sicher, wie es zu beheben.Postgres gibt keine Zeilen zurück, deren Wert NULL ist, wenn! =

ich eine Abfrage wie diese ausgeführt wird:

SELECT * FROM beers WHERE name != 'Budlight'; 

ich es erwarten Zeilen zurückgeben, wo name nicht gleich Budlight ist. Die Ergebnisse sollten Zeilen enthalten, deren Name NULL lautet. Stattdessen zeigt meine Ergebnisse Zeilen, in denen name nicht Budlight oder NULL ist.

Wie kann ich die Abfrage bilden, wo nur Zeilen, deren Name nicht Budlight ist, von den Ergebnissen weggelassen werden?

SQLFiddle: http://www.sqlfiddle.com/#!15/7b9bd/1

Antwort

5

Postgres bietet den is distinct from Betreiber. Sie tun können:

SELECT * 
FROM beers 
WHERE name IS DISTINCT FROM 'Budlight'; 

Dies tut, was Sie mit NULL Werte erwarten. Dieser Operator wird in der documentation erläutert.

3

Der SQL-Standard Weg ist nur zu sagen OR col IS NULL, z.B.

SELECT * FROM beers WHERE name <> 'Budlight' OR name IS NULL; 

Gordon Antwort weist darauf hin, IS DISTINCT FROM eine Nicht-SQL-Standardverfahren, das zu sagen. Beachten Sie, dass PostgreSQL möglicherweise keine Indizes für IS DISTINCT FROM verwendet, so dass ich es nur in Triggern verwende, die Skalare vergleichen, und col <> 'something' OR col IS NULL den Rest der Zeit verwenden.

Verwandte Themen