with reporting_hierarchy 
(employee_id, manager_id, reporting_level,first_name,last_name,salary, title)as 
(select employee_id, manager_id, 0 reporting_level, first_name, last_name,salary, title from more_employees
union all
select e.employee_id, e.manager_id,r.reporting_level + 1 as reporting_level, e.first_name,e.last_name,e.salary, e.title
from reporting_hierarchy r, more_employees e
where r.employee_id=e.manager_id
)
search depth first by employee_id set order_by_employee_id
cycle title set same_title to 'Y' default 'N'
select employee_id, manager_id, lpad(' ',2*reporting_level)||first_name||' '||last_name as employee, salary, title, same_title 
from reporting_hierarchy
order by order_by_employee_id;在where句中,r.employee_id=e.manager_id和e.employee_id=r.manager_id 互换有什么区别?作用是什么?

解决方案 »

  1.   

    在where句中,r.employee_id=e.manager_id和e.employee_id=r.manager_id 互换有什么区别?作用是什么?
    没有你的结构,从语句上来看:
    前者是 向上查询, 自己-> 自己的上级-> 上级的上级
    后者是向下查询。 自己-> 自己的下属们-> 下属的下属们。
      

  2.   


    这是我的more_employees的那张表,我练习的是使用递归子查询因子化查询分层数据,其中r.employee_id=e.manager_id和e.employee_id=r.manager_id 这两个等式用于了不同的两个coding,当我对调r. 和e.的时候,他们的输出会有差别,不明白他们的逻辑顺序,是不是这个有区别而产生的输出的差别?
      

  3.   

     r.employee_id=e.manager_id 如果是这个等式,那么应该是r.employee_id,然后进入e.manager_id进行遍历吗?