如果查询的角色不是ExternalHealthCoach,则查询会尝试从给定提供程序的lprovider表返回所有角色。如果他的角色是ExternalHealthCoach,那么将ExternalHealthCoach作为提供者的角色返回。
select
role
from lprovider
where provider_id = 63 and
role in (select case when role = 'ExternalHealthCoach' then role
else (select distinct role from lprovider) end from lprovider);
Lprovider表中的示例记录:
role_column
ExternalHealthCoach
InternalHealthCoach
医生
FrontDesk
管理
统筹
如果provider_id = X并且他不是ExternalHealthCoach,那么我想返回所有角色而不仅仅是一名医生。
例: 如果provider_id = 63且他的role = doctor,则查询应返回lprovider表中的所有角色。即
ExternalHealthCoach,InternalHealthCoach,Doctor,FrontDesk,Admin,Co-ordinator
但是在执行时遇到错误。 错误代码:1242子查询返回超过1行
提前致谢。
答案 0 :(得分:1)
case
*表达式返回一个值,而不是值列表。
我认为你想要的逻辑是:
select l.role
from lprovider l
where l.provider_id = 63 and
(l.role = 'Rejuvalyte-ExternalHealthCoach' or
l.role in (select l2.role from lprovider l2)
);
请注意,select distinct
与子查询一起使用时不需要in
。
这种逻辑仍然有点令人困惑。我认为条件的in
部分没有任何作用。你可以删除它。