select a.orgid,a.orgname
from org a
where level<=3
start with a.orgid in (select b.orgid from person b where b.name='xxx')
connect by a.orgid=prior a.uporganid你是怎么写的

解决方案 »

  1.   

    如果你用我原语句查的话
    检查下person表的name字段上是否有索引
    部门表和员工表的数据量分别有多大?部门表应该不大吧另外烦请把想要的结果描述清楚
      

  2.   

        SELECT p.name, d1.orgname, d2.orgname, d3.orgname
          FROM person p
     LEFT JOIN org d1 ON d1.orgid = p.orgid
     LEFT JOIN org d2 ON d2.orgid = d1.uporganid
     LEFT JOIN org d3 ON d3.orgid = d2.uporganid
         WHERE p.name = '张三'
    --单独这个查询要多少时间?比较长就要在 name 上建索引。
    SELECT * FROM person p WHERE p.name = '张三'
    还有org.orgid应该是主键吧。
      

  3.   

    我用你这个查了下,挺快的,但是每条数据都重复2个或3个,怎么去除重复呢
    单独查询SELECT * FROM person p WHERE p.name = '张三',20条数据只需要0.093秒
      

  4.   

    org.orgid是主键吗?应该是你的org表存在orgid重复的现象