Vérifier si une Postgres composite champ est null/vide
Avec postgres types de composé vous pouvez en fait créer un champ avec la structure étant défini comme une autre table. J'ai le composite champ "destinataire" de type "personne". Ce champ de destinataire est souvent laissée vide dans mon scénario spécifique. Quelle est la bonne façon de vérifier si un composite de champ est vide. J'ai essayé:
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
Dans tous ces cas, il ne retourne rien. Alors, comment avez-vous correctement vérifier si une valeur composite est vide ou pas?
Mise à JOUR
Après quelques lecture, il semble comme c'est mon problème:
On peut penser que
!(x IS NULL) = x IS NOT NULL
est vrai dans tous les cas. Mais il est une exception - types de composé. Quand un seul champ d'une valeur composite estNULL
et un autre champ estNOT NULL
, alors le résultat de ces deux opérateurs est faux.IS NULL
est vrai, que lorsque tous les champs sontNULL
.IS NOT NULL
est vrai, que lorsque tous les champs sontNOT NULL
. Pour tout litige entre les deux, les deux opérateurs de retour faux.
J'ai quelques champs qui sont nuls, et d'autres qui ne le sont pas. J'espérais que le champ doit être considéré comme not NULL, si n'importe quel élément dans le domaine du composite n'est pas nul... pas quand ils ne sont pas null. Est-il un moyen de contourner ce problème autre que la vérification de chaque domaine?
Vous devez vous connecter pour publier un commentaire.
IS NULL
etIS NOT NULL
de travail pour les types complexes, trop, de sorte que ces deux doivent être appropriés:IS NULL
/IS NOT NULL
pour le complexe / ligne / types d'enregistrement est spécial.Pour attraper les cas où pas tous champs de la composite valeur (ligne /enregistrement) sont NULS:
<row-type> is NULL
ne renvoieTRUE
si tous champs sontNULL
.<row-type> is NOT NULL
ne renvoieTRUE
si tous champs sontNOT NULL
.Les parenthèses sont facultatives. La priorité de l'opérateur travaille en notre faveur, de toute façon.
Test de ligne /de l'enregistrement pour les NULS
Démontrant les différentes options:
Résultat:
SQL Violon.
Connexes:
is [not] null
ne peut évaluer àtrue/false
de sorte qu'il ressemble (pour moi)is not true
n'est pas nécessaire et justenot (recipient is [not] null)
suffirait. Ce qui me manque?