2011-08-10 76 views
0

我有一個查詢得到的值(這是相當長的,但這裏是它的要點)爲什麼我不能從導軌IFNULL

 
Name.find_by_sql(['SELECT IFNULL(users.last_name, "nil") FROM users 
        JOIN user_groups ON user_groups.user_id = users.id 
        JOIN groups ON groups.id = user_groups.grous_id 
        WHERE users.first_name IN (?)', ['Sam','Sally']]) AND groups.name='baseball' 

現在山姆是棒球組,但薩利不是。

我希望,我會回來(Sam的姓是山)

['Hill','nil']

但我只得到[「山」]。 我不確定爲什麼我沒有得到'零'返回。 我試過每個連接語句上的'LEFT OUTER JOIN',因爲我想也許這就是'零'丟失的地方,但我仍然只得到一個返回的項目。

回答

2

由於您對groups.name的過濾器位於WHERE子句中,因此您沒有收到迴應。這將只返回返回棒球組中的用戶。如果您在JOIN添加條件,那麼你會得到用戶回來不屬於棒球組的一部分,他們將有預期的NULL值:

JOIN groups ON groups.id = user_groups.grous_id AND groups.name='baseball' 
+0

這似乎還有一段路丹,不幸的是,我收回了所有不屬於棒球隊的用戶,我試圖從「IN」聲明中找回那些用戶。另外,當我使用'RIGHT OUTER JOIN'時,我只得到所有用戶,如果我只使用JOIN,我只能回到'Hill' – pedalpete

+0

如果你讓所有用戶回來,那麼users.first_name過濾器肯定是'無法正確應用。不幸的是,我不熟悉你使用的語法。也許只是嘗試硬編碼users.first_name IN('Sam','Sally')',以確保它是你的應用程序引起的問題,而不是查詢本身。 –

+0

啊是的,你是對的。謝謝 – pedalpete