【发布时间】:2015-11-18 07:29:01
【问题描述】:
有foo=nil 和bar=43 的记录。为什么以下查询与该记录不匹配。它不应该只检查foo,因为它与给定值匹配(即nil)吗?
myrecords.where("foo = ? OR bar = ?", nil, 42).first
【问题讨论】:
标签: sql ruby-on-rails ruby ruby-on-rails-3 rails-activerecord
有foo=nil 和bar=43 的记录。为什么以下查询与该记录不匹配。它不应该只检查foo,因为它与给定值匹配(即nil)吗?
myrecords.where("foo = ? OR bar = ?", nil, 42).first
【问题讨论】:
标签: sql ruby-on-rails ruby ruby-on-rails-3 rails-activerecord
嘿,你可以尝试这种方式 null 值在 mysql 中不进行比较以获取更多NULL 值的信息参考
Working with NULL Values
myrecords.where("foo is null OR bar = ?", 42).first
如果您不知道对象的值是
null或not null使用mysql的NULL-safe equal to operator 作为:
myrecords.where("foo <=> ? OR bar = ?", nil, 42).first
【讨论】:
myrecords.where("foo = ? OR bar = ?", some_obj_could_be_nil, 42).first。有没有更好的办法?
OR条件或Arel查询你可以放置OR然后你可以直接创建活动记录查询。那么它们不是依赖于数据库的部分。
这应该可行:
myrecords.where("foo = ? OR bar = ?", NULL, 42).first
【讨论】:
where(foo: nil, bar: 42) 这个地方是OR 子句吗?我认为它将AND 放在mysql 查询中。并且 OP 需要OR