我在 Rails3 应用程序中遇到了意外的 postgres 查询问题。
我以为我会通过 stackoverflow 运行它,看看互联网的大脑要说什么:)
这个结果是预期的行为(为什么?!)还是这是一个错误?
鉴于我的 Postgres 9.1.4 数据库中有一个表 Orders:
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' 在这里不正确?!= 是否只是忽略 NULL 值?应该是?
注意:我使用以下查询产生了所需的结果:
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]
任何意见将不胜感激。