我有以下嵌套查询:
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'
你知道如何解决这个问题吗?
答案 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
。