我在Rails3應用程序中遇到了意外的postgres查詢問題。NULL!= SQL查詢中的值(postgres和rails3)的結果
我想我會用計算器運行這個,看看互聯網的大腦不得不說:)
是這樣的結果預期的行爲(爲什麼?),或者這是一個錯誤?
假設我有一個表,訂單,在我的Postgres 9.1.4數據庫:
id state
===== ======
1 <-- nil (default value)
2 'success'
3 'failure'
當我運行查詢:
Order.where('orders.state != ?', 'success').map { |order| order.id }
Order Load (3.8ms) SELECT "orders".* FROM "orders" WHERE (orders.state != 'success')
=> [3]
我期待的結果[1,3 ]。顯然有2行滿足(!='success')。
爲什麼nil!='success'在這裏不是真的?不!!=只是忽略空值?應該是?
注:我公司生產通過使用下面的查詢所期望的結果:
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]
任何意見,將不勝感激。
不知道爲什麼,但你的第一個請求是檢查* qb_sync_status *而它應該檢查*狀態* ... – Raindal 2013-05-10 16:10:22
啊,因爲我很好地複製和粘貼這個例子。更正,謝謝Sparda – 2013-05-10 16:19:01
這是底層SQL設計工作的方式。在選擇數據時,NULL值可能會導致問題,因爲當將未知值(即NULL)與任何其他值進行比較時,結果始終未知並且未包含在最終結果中。 – thisfeller 2013-05-10 16:26:26