在真或假结果表达式中重用IF条件的结果

时间:2014-06-08 08:47:49

标签: mysql

我有以下嵌套查询:

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` 

我想做什么,如果没有设置messages_status.status(即如果它是NULL),它应该返回' unread'。但是,如果已设置,则应返回其值。

目前,它会返回错误:Unknown column 'messages_status.status' in 'field list'

你知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分: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