如何在select查询中使用case语句设置值?

时间:2018-03-21 12:20:46

标签: mysql sql case

我有这样的查询

  left outer join ( select  tm.item_id as item_id,function_role =(CASE 
   mf.function_name
   when mf.function_name is not null 
   then mf.function_name
   else 'admin' 
   end)
   from team_members tm 
   join mem_function mf on mf.function_id=tm.function_id
   ) bnu on bnu.item_id = p.pro_id

当mem_function表的function_name列中没有值时,我想将该值设置为'admin'。 当我尝试这个时,它会抛出“从找不到预期的关键字” 无论如何要解决这个问题?

1 个答案:

答案 0 :(得分:2)

这是你想要的吗?

left outer join
(select tm.item_id as item_id,
        coalesce(function_name, 'admin') as function_role
 from team_members tm join
      mem_function mf
      on mf.function_id = tm.function_id
) bnu
on bnu.item_id = p.pro_id

虽然您可以使用case执行此操作,但coalesce()确实是更好的解决方案。

我认为您的问题涉及function_role =。这会分配一个变量,而不是列名。

编辑:

您的问题似乎在外部查询中。所以你想要:

select . . ., coalesce(function_name, 'admin') as function_role
from . . .
left outer join
(select tm.item_id as item_id, function_name
 from team_members tm join
      mem_function mf
      on mf.function_id = tm.function_id
) bnu
on bnu.item_id = p.pro_id

您可能不需要子查询,但这是另一回事。