我有这样的查询
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'。 当我尝试这个时,它会抛出“从找不到预期的关键字” 无论如何要解决这个问题?
答案 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
您可能不需要子查询,但这是另一回事。