tôi đã nhầm lẫn đằng sau những lập luận trong các cách sau:Tại sao PostgreSQL không trả về giá trị null khi điều kiện là <> true
SELECT * FROM table WHERE avalue is null
Returns x số hàng nơi 'Avalue' là null
SELECT * FROM table WHERE avalue <> true
Có không trả lại các hàng có 'avalue' là không.
lập luận của tôi (mà dường như là không chính xác) là như null
là một giá trị duy nhất (nó không phải là thậm chí bằng null
) có nghĩa là nó sẽ hiển thị trong kết quả thiết lập như nó không phải là bằng true
một trong hai.
Tôi đoán bạn có thể lập luận rằng bằng cách nói column <> value
bạn ngụ ý rằng cột có giá trị do đó bỏ qua các giá trị null
hoàn toàn.
Lý do đằng sau điều này là gì và điều này có giống nhau trong SQL DB thông thường khác không?
Lý do của tôi (giả định) cho tôi biết điều này phản trực giác và tôi muốn tìm hiểu lý do.
[Ba giá trị Logic] (http://en.wikipedia.org/wiki/Three-valued_logic). Bạn giả sử rằng các câu trả lời duy nhất có thể cho '<>' là 'true' hoặc' false' - trong khi trong SQL, có tùy chọn 'unknown'. Đây là tiêu chuẩn. (Nhạy cảm, MySQL liên kết 'UNKNOWN' và' NULL' để ở đó, các kết quả có thể là 'TRUE',' FALSE' và 'NULL') –
SQL Server thực hiện theo cách tương tự. – Fanda
Như Damien đang nói ... Điều này thường được gọi là ba giá trị logic. – Kuberchaun