我刚进公司三天, 项目经理就给了我项目的一个模块。大概形容一下, 就是查询。。
现在的要求是这样在一张表中自连接查询
举个例子   就像一张员工表里 有 一个  id  和一个  上级的id 的属性
怎样通过   id 查找出  所有下属的信息(包括下属的下属)   因为用的是mysql数据库。  
oracle的
还有,怎样查出  指定的某个下属的属性。。
sql 不太会写啊,怕过不了试用期,求各位高人指点指点了。

解决方案 »

  1.   

    1.用存储过程+游标..
    2.select lpad(e.ename,length(e.ename)+(level-1)*2,'-') ename from emp e 
      start with empno = ?
      connect by prior empno=mgr;
      

  2.   

    补上存储过程create or replace procedure pro_executeQuery(v_empno number,v_count number)
    is  
        cursor emp_cur is  select  * from emp where mgr = v_empno;
        cursor emp_cur1 is select  *  from emp where empno = v_empno;
        v_emprow emp%rowtype;
        v_str varchar(100);
    begin  for i in 1..v_count loop  
        v_str := v_str||'    ';
      end loop; 
      
      open emp_cur1;
        fetch emp_cur1 into v_emprow;
          if emp_cur1%found then   
          dbms_output.put_line(v_str||v_emprow.ename||':'||v_emprow.sal);
          else
          raise_application_error(-20000,'员工不存在,请您重新查询!');
          end if;
      close emp_cur1;
      
      open emp_cur;
        loop
          fetch emp_cur into v_emprow;
          if emp_cur%found then
             pro_executeQuery(v_emprow.empno,v_count+1);
          end if;
          exit when emp_cur%notfound;
        end loop;
      close emp_cur;
      
      Exception when others then
         dbms_output.put_line(Sqlerrm);
         
    end pro_executeQuery;
      

  3.   

    connect by prior 这个函数在mysql里好像不能用吧。。
      

  4.   

    那你用存储过程+游标写个mysql版本的递归调用嘛..