我有以下嵌套查询:
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。状态集(即,如果它是NULL),它应该返回"未读"。但是,如果它被设置了,它应该返回它的值。
当前,它返回一个错误:Unknown column 'messages_status.status' in 'field list'
你知道怎么解决这个问题吗?
在其他地方不能引用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
的参数。