Postgresql SQL: Hoe controleer je het booleaanse veld met null en True,False Value?

In mijn databasetabel heb ik één booleaanse kolom. die een transactie hebben met zal False, True en Null.

Dit zijn de gevallen die ik heb geprobeerd:

Case:1

select * from table_name where
boolean_column is null;

werkt goed. Geef het resultaat met alle transacties met een null-waarde voor die kolom.

Case:2

select *from table_name where boolean_column = False;

Werkt goed. Geeft resultaat met alle transacties met False waarde voor die kolom.

Geval:3
Dit is een eis die niet werkt. Ik wil dat alle transacties de waarde False en Null hebben.

Ik heb deze geprobeerd.

i) select *from table_name where boolean_column is False or Null;

Dat geeft alleen het resultaat voor False, het toont geen nulrecords.

ii) select *from table_name where boolean_column is Null or False;

*Dat geeft alleen het resultaat voor null, het toont geen records met de waarde False. *

iii) select *from table_name where boolean_column is Null or boolean_column = False;

Dit is gewoon alle transacties weergeven, er wordt geen enkele voorwaarde toegepast.

Hoe dit probleem op te lossen.
Elke begeleiding wordt op prijs gesteld.

Bij voorbaat dank.

Rgds,
Anil.


Antwoord 1, autoriteit 100%

Er zijn 3 toestanden voor boolean in PG: waar, onwaar en onbekend (null). Hier uitgelegd: Postgres boolean datatype

Daarom hoeft u alleen te zoeken naar NOT TRUE:

SELECT * from table_name WHERE boolean_column IS NOT TRUE;

Antwoord 2, autoriteit 59%

Ik ben niet deskundig genoeg in de innerlijke werking van Postgres om te weten waarom uw zoekopdracht met de dubbele voorwaarde in de WHERE-clausule niet werkt. Maar een manier om dit te omzeilen is door een UNIONte gebruiken van de twee queries waarvan je weet dat ze werken:

SELECT * FROM table_name WHERE boolean_column IS NULL
UNION
SELECT * FROM table_name WHERE boolean_column = FALSE

U kunt ook proberen COALESCEte gebruiken:

SELECT * FROM table_name WHERE COALESCE(boolean_column, FALSE) = FALSE

Deze tweede zoekopdracht vervangt alle null-waarden door falseen vergelijkt vervolgens met falsein de WHERE-voorwaarde .


Antwoord 3, autoriteit 12%

Op PostgreSQL kunt u het volgende gebruiken:

SELECT * FROM table_name WHERE (boolean_column IS NULL OR NOT boolean_column)

Antwoord 4, autoriteit 6%

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

    Wordt geïnterpreteerd als “( boolean_column is False ) of (null)”.

    Het retourneert alleen rijen waar boolean_columnFalse is, aangezien de tweede voorwaarde altijd false is.

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

    Dezelfde reden. Geïnterpreteerd als “(boolean_column is Null) of (False)”

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

    Deze is geldig en retourneert 2 rijen: falseen null.

Ik heb zojuist de tabel gemaakt om te bevestigen. Misschien heb je ergens getypt.


Antwoord 5, autoriteit 3%

Dit herleven om de optie DISTINCT FROMte posten, die al bestaat sinds Postgres 8. De aanpak is vergelijkbaar met het antwoord van Brad Dre. In uw geval zou uw selectie zoiets zijn als

SELECT *
  FROM table_name
 WHERE boolean_column IS DISTINCT FROM TRUE

Other episodes