这些陈述之间的区别是什么?

时间:2016-01-28 15:21:17

标签: ruby-on-rails ruby ruby-on-rails-4

我在做

Event.where(state: nil)获得1个结果,但Event.where('state = ?', nil)获得0个结果。

这些之间有什么区别?

2 个答案:

答案 0 :(得分:5)

where(state: nil)的计算结果为WHERE events.state IS NULL,其他人的计算结果为WHERE (state = NULL)

现在,除了使用NULL运算符之外,与NULL进行比较的任何内容都会返回IS。因此,如果您想检查它是否为NULL,请使用state IS NULL,如果不是NULLstate IS NOT NULL

state = NULL,返回NULL,其中WHERE子句相当于FALSE,这就是您获得 0 记录的原因。

events.state IS NULL是正确的空比较,因此您可以获得数据库中的输出。

答案 1 :(得分:1)

他们生成不同的sql。当您遇到这样的问题时,您可以将.to_sql添加到您的关系中,它将显示生成并发送到数据库的sql。

Event.where(state:nil)生成this,它检查x是否为null值

... WHERE events.state IS NULL

Event.where(' state =?',nil)产生这个,它检查X是否等于null永远不会为真

... WHERE (state = NULL)
相关问题