Dans ma table de base de données, j'ai une colonne booléenne. qui ont une transaction avec la volonté False, True et Null.
Voici les cas que j'ai essayés:
cas: 1
select * from table_name where
boolean_column is null;
fonctionne bien. Donne le résultat avec toutes les transactions ayant une valeur nulle pour cette colonne.
Cas: 2
select *from table_name where boolean_column = False;
Fonctionne bien. Donne le résultat avec toutes les transactions ayant la valeur False pour cette colonne.
Cas: 3 Ceci est une exigence qui ne fonctionne pas. Je veux que toutes les transactions aient la valeur False et Null.
J'ai essayé ceux-ci.
je) select *from table_name where boolean_column is False or Null;
Ce qui ne donne que le résultat pour False ne montre pas les enregistrements nuls.
ii) select *from table_name where boolean_column is Null or False;
* Qui ne donne que le résultat pour null, il ne montre pas les enregistrements avec la valeur False. *
iii) select *from table_name where boolean_column is Null or boolean_column = False;
Il s’agit simplement d’afficher que la transaction n’applique aucune condition.
Comment résoudre ce problème. Toute orientation appréciée.
Merci d'avance.
Rgds, Anil.
Je ne suis pas assez expérimenté dans les rouages de Postgres pour savoir pourquoi votre requête avec la double condition de la clause WHERE
ne fonctionne pas. Mais une façon de contourner ce problème serait d’utiliser un UNION
des deux requêtes que vous savez qui fonctionnent:
SELECT * FROM table_name WHERE boolean_column IS NULL
UNION
SELECT * FROM table_name WHERE boolean_column = FALSE
Vous pouvez aussi essayer d'utiliser COALESCE
:
SELECT * FROM table_name WHERE COALESCE(boolean_column, FALSE) = FALSE
Cette seconde requête remplacera toutes les valeurs NULL
par FALSE
, puis sera comparée à FALSE
dans la condition WHERE
.
Il existe 3 états pour boolean dans PG: true, false et unknown (null). Expliqué ici: type de données booléen Postgres
Par conséquent, vous n'avez besoin que d'une requête pour NOT TRUE:
SELECT * from table_name WHERE boolean_column IS NOT TRUE;
Sur PostgreSQL, vous pouvez utiliser:
SELECT * FROM table_name WHERE (boolean_column IS NULL OR NOT boolean_column)
select *from table_name where boolean_column is False or Null;
Est interprété comme "(boolean_column est False) ou (null)".
Il ne renvoie que les lignes où boolean_column
est faux car la deuxième condition est toujours fausse.
select *from table_name where boolean_column is Null or False;
Même raison. Interprété comme "(boolean_column est Null) ou (False)"
select *from table_name where boolean_column is Null or boolean_column = False;
Celui-ci est valide et renvoie 2 lignes: false
et null
.
Je viens de créer la table pour confirmer. Vous avez peut-être tapé quelque part.