我正在使用mysql中的sql查询。我的查询是这样的,where条款中的未知列与case + union + like
select reqId,sDate,stitle,sType,status,reqUser,assignedTo from
(select request_id as reqId,date as sDate,title as sTitle,type as sType,status as status,request_user as reqUser ,
case when status='posted' then fbuser.name
when status='awaiting approval' then fbmanager.name
when status='approved' then fbAdmin.name
when status='rejected' then fbAdmin.name
else null
end as assignedTo
from fb_requests fr
left join users fbuser on (fr.reqUser = fbuser.id)
left join users fbmanager on (fr.managerid= fbmanager.id)
left join users fbAdmin on (fr.adminin = fbAdmin.id)
where 1=1
and (upper(assignedTo) like upper('abc'))
UNION
select request_id as reqId,date as sDate,title as sTitle,type as sType,status as status,request_user as reqUser ,
case when status='posted' then fbuser.name
when status='awaiting approval' then fbmanager.name
else null
end as assignedTo
from fb_wall_posts fw
left join users fbuser on (fw.request_by_id = fbuser.id)
left join users fbmanager on (fw.manager_id= fbmanager.id)
where 1=1
and (upper(assignedTo) like upper('abc')))
这里我得到'unknown column assignedTo'。任何人都可以帮我解决这个问题。预先感谢有价值的答复。
看起来像stitle和sTitle区分大小写? –
第一个子查询确实是upper(assignedTO),但assignedTo不是fb_requests,fbuser,fbmanager或fbadmin中的值。它是基于状态和名称的派生值。因此,你需要在where子句中使用相同的case语句,因为操作顺序规定了表连接首先发生在where子句中。因此,在where子句被评估时,select和派生别名不在范围内。 – xQbert