DELIMITER //
create procedure gettest()
begin
set ppp=(select deptName from interview_department where taskCode='11221111' and deptCode='302079' );
select ppp;
end;
//
DELIMITER ;-- 表结构
taskcode     deptcode
11221111     部门名称
123              部门名称执行的时候 提示Error Code: 1242 Subquery returns more than 1 row
但是我的 where 条件都做限制了啊。  这是什么原因?

解决方案 »

  1.   

    select deptName from interview_department where taskCode='11221111' and deptCode='302079'  在语句后面加 limit 1;  就没问题了,但是我的where条件设置了2个啊,为什么提示我子查询 返回多行?
      

  2.   

    set ppp=(select deptName from interview_department where taskCode='11221111' and deptCode='302079' limit 1);
      

  3.   

    为什么要加limit 1 才能好使呢?
      

  4.   

    因为mysql查询会先经过语法分析,
    分析阶段不会知道你具体数据的多少
    不加limit 1 就有可能返回的是多条,分析阶段就会报错了
      

  5.   

    DELIMITER $$
    DROP PROCEDURE IF EXISTS `gettest`$$
    CREATE PROCEDURE `gettest`(out _ppp varchar(20))
    SQL SECURITY INVOKER
        BEGIN

    set _ppp = ( select deptName from interview_department where taskCode='11221111' and deptCode='302079' limit 1 );
    select _ppp;

        END$$
    DELIMITER ;call gettest(@q);
    select @q;