2016-01-28 83 views
2

我做這些陳述之間有什麼區別?

Event.where(state: nil)和送1分的結果,但對於Event.where('state = ?', nil)得到0的結果。

這些有什麼區別?

+1

你可以提供每個人的sql輸出嗎? '.to_sql' – xlembouras

+0

好吧,我現在看到。首先給出'state IS NULL',第二個'state = NULL'。 –

+0

第一個等價查詢將是'Event.where('state IS NULL')'。 'Event.where('state =?',nil)'與'Event.where(state:nil)'不一樣' – Pavan

回答

5

where(state: nil)的計算結果爲WHERE events.state IS NULL,另一個計算結果爲SQL中的WHERE (state = NULL)

現在,A NULL相比,任何事情都會返回NULL,除非您使用IS運算符。所以,如果你想檢查它是否爲NULL,則使用state IS NULL,如果不是NULL,則使用。

state = NULL,返回NULL,其中,在WHERE條款,相當於FALSE,這就是爲什麼你得到記錄。

events.state IS NULL是正確的空比較,所以你得到了你在DB中的輸出。

1

它們生成不同的sql。當你有這樣的問題時,你可以添加一個.to_sql到你的關係,它會顯示你生成併發送到數據庫的sql。

Event.where(狀態:無)產生此,如果x是像值空

... WHERE events.state IS NULL 

Event.where( '狀態=?',零)產生此,檢查是否X其中它檢查等於null這將永遠不會是真的

... WHERE (state = NULL)