【问题标题】:Subquery returns more than 1 row using my sql子查询使用mysql返回多于1行
【发布时间】:2021-10-04 15:34:22
【问题描述】:

我正在尝试从 MySQL 数据库中选择 id 用户(员工或领导或经理)和全名的 select 语句。取决于 id dept , id priority 。代码是:

PROCEDURE `get_parent`(id_dept int, id_priorty int )
BEGIN
if(select employee_tb.id_dept  from employee_tb where (employee_tb.id_dept=id_dept&&3=id_priorty))>0
then
begin
select id_employee ,full_name,3 as type from employee_tb;
end;
elseif(select leader_tb.id_dept from leader_tb where (leader_tb.id_dept=id_dept&&id_priorty=2))>0
 then
 begin
 select id_leader, full_name, 2 as type from leader_tb;
 end;
 elseif(select manager_tb.id_dept from manager_tb where (manager_tb.id_dept=id_dept&&id_priorty=1))>0
 then 
 begin
 select id_manager, full_name, 1 as type from manager_tb;
 end;
 else
 select "failed"as result ;
 end if;
END

【问题讨论】:

  • 嗨,欢迎来到 StackOverflow。我们可以处理更多信息,例如,当所有 SELECT 行允许多于一条时,为什么您认为应该只返回一条记录。 if(select employee_tb.id_dept from employee_tb where (employee_tb.id_dept=id_dept&&3=id_priorty))>0 ?

标签: mysql


【解决方案1】:
select id_employee ,full_name,3 as type from employee_tb;

select id_leader, full_name, 2 as type from leader_tb;

select id_manager, full_name, 1 as type from manager_tb;

检查条件后代码中的那 3 行无论如何都会选择表中的所有记录。

要解决这个问题:

PROCEDURE `get_parent`(id_dept int, id_priorty int )
BEGIN
if(select employee_tb.id_dept  from employee_tb where (employee_tb.id_dept=id_dept&&3=id_priorty))>0
then
begin
select id_employee ,full_name,3 as type from employee_tb where (employee_tb.id_dept=id_dept&&3=id_priorty);
end;
elseif(select leader_tb.id_dept from leader_tb where (leader_tb.id_dept=id_dept&&id_priorty=2))>0
 then
 begin
 select id_leader, full_name, 2 as type from leader_tb where (leader_tb.id_dept=id_dept&&id_priorty=2);
 end;
 elseif(select manager_tb.id_dept from manager_tb where (manager_tb.id_dept=id_dept&&id_priorty=1))>0
 then 
 begin
 select id_manager, full_name, 1 as type from manager_tb where (manager_tb.id_dept=id_dept&&id_priorty=1);
 end;
 else
 select "failed"as result ;
 end if;
END

如果有一条记录匹配这个where子句,它当然会给出一条记录。

【讨论】:

  • 仍然告诉我同样的错误,我注意到我希望在我的选择中给我一张表中的所有行(员工或领导或经理),当匹配优先级和 id 部门相同的条件时跨度>
猜你喜欢
  • 2018-03-08
  • 2014-02-15
  • 2012-09-17
  • 1970-01-01
  • 1970-01-01
  • 2017-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多