2014-06-08 2 views
1

나는 다음과 같은 중첩 된 쿼리 유무 : 없음 messages_status.status 세트가없는 경우 (이 NULL 인 경우 즉)재사용 결과

SELECT `messages`.*, 
    IF((select `status` from messages_status 
     where messages_status.message_id = messages.id and user_id = 149) IS NULL, 
     'unread', messages_status.status) as `status` 
FROM `messages` 

내가 수행하고자하는 무엇을 '읽지 않음'을 반환해야합니다. 그러나 설정되어 있으면 is는 값을 반환해야합니다. Unknown column 'messages_status.status' in 'field list'

가 어떻게이 문제를 해결하려면 어떤 생각을 가지고 있습니까 :

현재는 오류를 반환?

답변

1

다른 장소에서 if의 결과를 참조 할 수 없습니다. 당신은 쿼리 반복 수 :

IF((select `status` from messages_status 
     where messages_status.message_id = messages.id and user_id = 149) IS NULL, 
    'unread', 
    (select `status` from messages_status 
     where messages_status.message_id = messages.id and user_id = 149)) 
    as status 

을하지만 사용하는 아마 대신 join 명확입니다 :

select m.* 
,  coalesce(ms.status, 'unknown') 
from messages m 
left join 
     messages_status ms 
on  ms.message_id = m.id 
     and ms.user_id = 149 

coalesce 기능 null가 아닌 인수의 첫 번째 생산하고 있습니다.