web-dev-qa-db-fra.com

Postgresql SQL: Comment vérifier le champ booléen avec null et True, False Value?

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.

27
Anil Kesariya

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.

36
Tim Biegeleisen

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;
36
Brad Dre

Sur PostgreSQL, vous pouvez utiliser:

SELECT * FROM table_name WHERE (boolean_column IS NULL OR NOT boolean_column)
7
Dmitry Ukolov
  1. 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.

  2. select *from table_name where boolean_column is Null or False;

    Même raison. Interprété comme "(boolean_column est Null) ou (False)"

  3. 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.

4
Chris Chris