2011-08-10 71 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