Ruby on rails 什么';这些where语句之间的区别是什么?
我在做什么Ruby on rails 什么';这些where语句之间的区别是什么?,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我在做什么 Event.where(state:nil)并获得1个结果,但对于Event.where('state=?',nil)则获得0个结果 它们之间有什么区别?where(state:nil)在SQL中计算为where events.state为NULL,而另一个计算为where(state=NULL) 现在,与任何对象相比,NULL返回NULL,除非使用IS运算符。因此,如果要检查它是否为NULL,则使用状态为NULL,如果不是NULL,则状态为notnull state=NULL,返回
Event.where(state:nil)
并获得1个结果,但对于Event.where('state=?',nil)
则获得0个结果
它们之间有什么区别?where(state:nil)
在SQL中计算为where events.state为NULL
,而另一个计算为where(state=NULL)
现在,与任何对象相比,NULL
返回NULL
,除非使用IS
运算符。因此,如果要检查它是否为NULL
,则使用状态为NULL
,如果不是NULL
,则状态为notnull
state=NULL
,返回NULL
,在WHERE
子句中,它相当于FALSE
,这就是您得到0记录的原因
events.state为NULL
是正确的NULL比较,因此您得到的输出与DB中的相同。它们生成不同的sql。当你有这样的问题时,你可以在你的关系中添加一个.to_sql,它会显示生成并发送到数据库的sql
其中(state:nil)生成该值,它检查x是否是一个类似于null的值
... WHERE events.state IS NULL
Event.where('state=?',nil)生成此事件,它检查X是否等于null,这将永远不会为真
... WHERE (state = NULL)
您能为每一个提供sql输出吗
.to_sql
好的,我现在明白了。第一个给出的状态为NULL
,第二个给出的状态=NULL
。第一个的等价查询将是事件。其中('state IS NULL')
<代码>事件。其中('state=?',nil)与事件不同。其中(state:nil)
@MarcinDoliwa问得好。我喜欢它