Postgresql SQL: Comment vérifier champ booléen avec la valeur null et True,False Valeur?
Dans ma table de base de données, je vais avoir un booléen colonne. qui ont une certaine transaction avec la volonté de Faux, Vrai et la valeur Null.
Ce sont les cas que j'ai essayé:
Cas:1
select * from table_name where
boolean_column is null;
fonctionne bien. Donner le résultat avec toutes les transactions ayant la valeur null pour cette colonne.
Cas:2
select *from table_name where boolean_column = False;
Fonctionne bien. Donne suite à toutes les transactions avoir de Fausses valeur pour cette colonne.
Cas:3
C'est l'exigence qui ne fonctionne pas. Je veux de toutes les transactions ayant la valeur False et Null.
J'ai essayé ces.
i) select *from table_name where boolean_column is False or Null;
Qui ne donne que le résultat pour Faux il ne montre nulle dossiers.
ii) select *from table_name where boolean_column is Null or False;
*Qui ne donne que le résultat de la valeur null, il ne fait pas montre d'enregistrements avec valeur False. *
iii) select *from table_name where boolean_column is Null or boolean_column = False;
C'est tout simplement afficher la totalité de la transaction n'a pas appliqué aucune condition à tous.
Comment résoudre ce problème.
De toute orientation apprécié.
Merci d'Avance.
Rgds,
Anil.
OriginalL'auteur Anil Kesariya | 2015-10-28
Vous devez vous connecter pour publier un commentaire.
Je ne suis pas assez expert dans le fonctionnement interne de Postgres pour savoir pourquoi votre requête avec la double condition dans la
WHERE
clause ne fonctionne pas. Mais une façon de contourner ce problème serait d'utiliser unUNION
des deux requêtes qui vous savez faire du travail:Vous pouvez également essayer d'utiliser
COALESCE
:Cette deuxième requête va remplacer toutes les
NULL
valeurs avecFALSE
et puis comparer les contreFALSE
dans leWHERE
condition.OriginalL'auteur Tim Biegeleisen
Il y a 3 états pour les booléens en PG: vrai, faux et inconnu (null). Expliqué ici: Postgres type de données boolean
Par conséquent, vous devez seulement faire une requête pour PAS VRAI:
OriginalL'auteur Brad Dre
Sur PostgreSQL, vous pouvez utiliser:
OriginalL'auteur Dmitry Ukolov
select *from table_name where boolean_column is False or Null;
Est interprété comme "( boolean_column est Faux ) ou (null)".
Elle renvoie uniquement les lignes où
boolean_column
est Faux que la seconde condition est toujours fausse.select *from table_name where boolean_column is Null or False;
Même raison. Interprété comme "(boolean_column est Nul) ou (Faux)"
select *from table_name where boolean_column is Null or boolean_column = False;
Celui-ci est valide et renvoie les 2 rangs:
false
etnull
.Je viens de créer la table pour confirmer. Vous pourriez avoir typoed quelque part.
OriginalL'auteur Chris Chris