MYSQL - 错误代码:1242子查询返回超过1行

时间:2018-04-12 17:23:09

标签: mysql subquery

如果查询的角色不是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行

提前致谢。

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部分没有任何作用。你可以删除它。