mysql - 带 case + union + like 的 where 子句中的未知列

标签 mysql sql hibernate jdbctemplate

我正在mysql中进行sql查询。我的查询是这样的,

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') ))

这里我得到了 'unknowncolumnsignedTo' 。谁能帮我解决这个问题。预先感谢您的宝贵回复。

最佳答案

当你需要时,你不能在where条件中使用别名(你可以在order by中使用别名,在某些mysql版本中在group by中使用别名),你必须重复代码

  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(
        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
  ) 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(
    case when status='posted' then fbuser.name
       when status='awaiting approval' then fbmanager.name
      else null
    end
    ) like upper('abc') ))

关于mysql - 带 case + union + like 的 where 子句中的未知列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45550386/

相关文章:

php - MySql查询2条记录为1条结果

php - 选择更新和 php 脚本

php - 如何计算两天之间的天数,包括开始日期和结束日期

mysql - 使用 SQL/Access 创建类似表数据透视的输出

php - 限制子查询的偏移量

MySQL 连接查询 - 或者被忽略

mysql - 如果在另一个表上匹配,则排除一个表中的行 - MySql

java - 当我尝试映射(保留)我的数据库时出错

Hibernate Envers - REVINFO 表不存在

java - hibernate 条件 : inheritence: Get a list of only the root class entities