2011-08-10 5 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' 

지금 샘 야구 그룹에 (이 여기에 아주 긴하지만 그것의 요점이다)하지만, 샐리 아니다. 나는 내가 돌아올 것이라는 희망

는 (샘의 성 ​​힐입니다)

['Hill','nil']

하지만 난 단지 [ '힐'] 얻고있다. 나는 왜 'nil'이 반환되지 않았는지 잘 모르겠습니다. 나는 각각의 join 문에서 'LEFT OUTER JOIN'을 시도했다. 아마도 'nil'이 없어지는 곳이라고 생각 했으므로 하나의 항목 만 리턴한다.

답변

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