2015-10-28 23 views
6

Trong bảng cơ sở dữ liệu của tôi, tôi đang có một cột boolean. có một số giao dịch với False, True và Null.Postgresql SQL: Cách kiểm tra trường boolean bằng null và True, False Value?

Đây là những trường hợp tôi đã cố gắng:

Trường hợp: 1

select * from table_name where 
boolean_column is null; 

hoạt động tốt. Cho kết quả với tất cả các giao dịch có giá trị null cho cột đó.

Trường hợp: 2

select *from table_name where boolean_column = False; 

trình tốt. Cung cấp kết quả với tất cả các giao dịch có giá trị False cho cột đó.

Trường hợp: 3 Đây là yêu cầu không hoạt động. Tôi muốn tất cả các giao dịch có giá trị False và Null.

Tôi đã thử các tính năng này.

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

Mà chỉ cung cấp kết quả cho False nó không cho thấy hồ sơ null.

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

* Mà chỉ cung cấp kết quả cho null nó không có hiển thị hồ sơ với giá trị False. *

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

này chỉ đơn giản là hiển thị tất cả các giao dịch không áp dụng bất kỳ điều kiện nào cả.

Cách giải quyết vấn đề này. Bất kỳ hướng dẫn nào được đánh giá cao.

Cảm ơn trước.

Rgds, Anil.

Trả lời

17

Tôi không đủ chuyên gia trong hoạt động bên trong của Postgres để biết tại sao truy vấn của bạn với điều kiện kép trong mệnh đề WHERE không hoạt động. Nhưng có một cách để làm được việc này sẽ được sử dụng một UNION của hai truy vấn mà bạn biết làm việc:

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

Bạn cũng có thể thử sử dụng COALESCE:

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

truy vấn thứ hai này sẽ thay thế tất cả NULL giá trị với FALSE và sau đó so sánh với FALSE trong điều kiện WHERE.

+0

Query My không phải là dòng đơn. Tôi có hơn 20 Điều kiện Truy vấn là khoảng 1 trang. sao tôi phải lặp lại cùng một truy vấn? –

3

On PostgreSQL bạn có thể sử dụng:

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;

    Được hiểu là "(boolean_column là False) hoặc (null)".

    Nó chỉ trả về các hàng ở đó boolean_column là sai vì điều kiện thứ hai luôn là sai.

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

    Lý do tương tự. Hiểu là "(boolean_column là Null) hoặc (False)"

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

    một này có giá trị và trả về 2 hàng: falsenull.

Tôi vừa tạo bảng để xác nhận. Bạn có thể đã đánh máy ở đâu đó.

6

Có 3 trạng thái cho boolean trong PG: true, false và unknown (null). Giải thích ở đây: Postgres boolean datatype

Vì vậy, bạn chỉ cần truy vấn cho KHÔNG ĐÚNG:

SELECT * from table_name WHERE boolean_column IS NOT TRUE; 
Các vấn đề liên quan