2015-10-28 14 views
6

Nella mia tabella di database sto avendo una colonna booleana. che hanno qualche transazione con False, True e Null.Postgresql SQL: come verificare il campo booleano con null e True, False Value?

Questi sono i casi ho provato:

Caso: 1

select * from table_name where 
boolean_column is null; 

funziona bene. Dai il risultato con tutte le transazioni con valore null per quella colonna.

Caso: 2

select *from table_name where boolean_column = False; 

funziona bene. Fornisce il risultato con tutte le transazioni con valore False per quella colonna.

Caso: 3 Questo è un requisito che non funziona. Voglio che tutte le transazioni abbiano valore False e Null.

Ho provato questi.

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

che dà solo il risultato per False non mostra record nulli.

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

* che dà solo il risultato per nulla non lo fa spettacoli record con valore FALSE. *

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

Questo è semplicemente visualizzare tutta la transazione non applica alcuna condizione affatto.

Come risolvere questo problema. Qualsiasi consiglio apprezzato.

Grazie in anticipo.

Rgds, Anil.

risposta

17

Non sono abbastanza esperto nel funzionamento interno di Postgres per sapere perché la query con la doppia condizione nella clausola WHERE non funziona. Ma un modo per aggirare il problema sarebbe quella di utilizzare un UNION delle due domande che si sa fare il lavoro:

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

Si potrebbe anche provare a utilizzare COALESCE:

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

Questa seconda query sostituirà tutti NULL valori con FALSE e quindi confrontare con FALSE nella condizione WHERE.

+0

la mia domanda non è sola linea. Ho più di 20 condizioni query è di circa 1 pagina. devo ripetere ancora la stessa query? –

3

su PostgreSQL è possibile utilizzare:

SELECT * FROM table_name WHERE (boolean_column IS NULL OR NOT boolean_column) 
1
  1. select *from table_name where boolean_column is False or Null;

    viene interpretato come "(boolean_column è False) o (null)".

    Restituisce solo le righe dove boolean_column è False poiché la seconda condizione è sempre falsa.

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

    stesso motivo. Interpretato come "(boolean_column è Null) o (Falso)"

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

    Questo è valido e restituisce 2 file: false e null.

Ho appena creato la tabella per confermare. Potresti aver digitato un errore da qualche parte.

6

Ci sono 3 stati per boolean in PG: true, false e unknown (null). Spiegato qui: Postgres boolean datatype

Pertanto è necessario solo query per NOT TRUE:

SELECT * from table_name WHERE boolean_column IS NOT TRUE; 
Problemi correlati