Prüfen Sie, ob eine Postgres-composite-Feld ist null/leer

Mit postgres-composite-Typen können Sie im Grunde machen erstellen Sie ein Feld mit der Struktur, die definiert wird als eine andere Tabelle. Ich habe das zusammengesetzte Feld "Empfänger" des Typs "person". Das Empfänger-Feld oft leer in meinem speziellen Szenario. Was ist der richtige Weg, um zu überprüfen, ob Sie eine composite-Feld leer ist. Ich habe versucht:

select * from bla where recipient is not null
select * from bla where recipient is null
select * from bla where recipient = null
select * from bla where recipient != null

In allen diesen Fällen spielt es keine Rückkehr, nichts. So wie Sie richtig prüfen Sie, ob ein composite-Wert leer ist oder nicht?

UPDATE

Nachdem einige mehr Lesen, es sieht aus wie das ist mein problem:

Kann man denken, dass !(x IS NULL) = x IS NOT NULL ist wahr in allen Fällen. Aber es gibt eine Ausnahme - composite-Typen. Wenn ein Feld ein zusammengesetzter Wert ist NULL - und ein weiteres Feld ist NOT NULLdann Folge, dass beide Operatoren falsch ist. IS NULL ist wahr, nur wenn Sie alle Felder NULL. IS NOT NULL ist wahr, nur wenn Sie alle Felder NOT NULL. Für alle Fälle dazwischen, dann sind beide Operatoren den Wert false zurück.

Habe ich einige Felder, die null sind, und andere, die es nicht sind. Ich hatte gehofft, dass das Feld, das wäre als NICHT NULL, wenn ein Element in das zusammengesetzte Feld nicht null ist... nicht, wenn ALLE von Ihnen sind nicht null. Gibt es eine Möglichkeit, um dieses über die Prüfung jedes Feld?

InformationsquelleAutor der Frage coderama | 2014-03-31

Schreibe einen Kommentar