Tôi gặp phải vấn đề truy vấn postgres không mong muốn trong ứng dụng Rails3 của tôi.Kết quả của NULL! = Giá trị trong một truy vấn SQL (postgres và rails3)
tôi nghĩ rằng tôi muốn chạy này bằng cách stackoverflow và xem những gì bộ não của internet phải nói :)
là kết quả hành vi này dự kiến (và tại sao ?!) hay đây là lỗi?
Cho rằng tôi có một bảng, Đơn hàng, trong Postgres của tôi 9.1.4 cơ sở dữ liệu:
id state
===== ======
1 <-- nil (default value)
2 'success'
3 'failure'
Khi tôi chạy truy vấn:
Order.where('orders.state != ?', 'success').map { |order| order.id }
Order Load (3.8ms) SELECT "orders".* FROM "orders" WHERE (orders.state != 'success')
=> [3]
Tôi đã chờ đợi kết quả [1, 3 ]. Có 2 hàng rõ ràng trong đó (! = 'Success') được thỏa mãn.
Tại sao nil! = 'Success' không đúng ở đây? Có! = Chỉ bỏ qua các giá trị NULL? phải không?
Chú ý: Tôi tạo ra kết quả mong muốn bằng cách sử dụng các truy vấn sau đây:
Order.where('orders.state IS NULL OR orders.state != ?', 'success').map { |order| order.id }
Order Load (2.3ms) SELECT "orders".* FROM "orders" WHERE (orders.state IS NULL OR orders.state != 'success')
=> [1, 3]
Bất kỳ ý kiến sẽ được đánh giá.
Không biết tại sao nhưng yêu cầu đầu tiên của bạn là kiểm tra * qb_sync_status * trong khi nó nên kiểm tra * state * ... – Raindal
aah, vì tôi đã sao chép và dán ít ví dụ này. sửa chữa, cảm ơn Sparda –
Đây là cách mà SQL cơ bản được thiết kế để hoạt động. Giá trị NULL có thể gây ra vấn đề khi chọn dữ liệu vì khi so sánh giá trị không xác định, tức là NULL, với bất kỳ giá trị nào khác, kết quả luôn luôn không xác định và không được bao gồm trong kết quả cuối cùng. – thisfeller