case 1:with a as 
(select aa.* from vw_x_dvfile aa join vw_x_dvtype_all bb on aa.dvid=bb.dvid 
and bb.dvtpid in (select ddtid from dm_dvtype connect by ddtpid=prior ddtid start with ddtid='10')) 
select b.* from a aa join vw_x_dvfile b on aa.dvid=b.dvid 
where level>1 
connect by b.dvpid=prior b.dvid 
start with b.dvid=aa.dvid and not exists(select 1 from a where topdvid=aa.topdvid and llevel<aa.llevel) 
order by b.topdvid,b.llevel,b.dvid子查询和结果都有记录 //子查询a 数据来源于 vw_x_dvfile和输出结果所用视图一致,且所有数据都是有层次结构的 
case 2: with a as 
 (select aa.* from vw_x_dvfile aa where  
 (dvmemo like '工%' or dvname like '工%' or dvusepsn like '工%' or invname like '工%' or dvmanid like '工%') ) 
 select b.* from a aa  join vw_x_dvfile b on aa.dvid=b.dvid 
 where level>1 
 connect by b.dvpid=prior b.dvid 
 start with b.dvid=aa.dvid 
 and not exists(select 1 from a where topdvid=aa.topdvid and llevel<aa.llevel) 
 order by b.topdvid,b.llevel,b.dvid未有记录输出,子查询有记录,将level>1去除即可显示子查询记录,也就是子查询的条件好象用到了主条件上这事情我觉得怪异,请求帮助 

解决方案 »

  1.   

    select dvid,topdvid,llevel,dvusepsn,invname,dvmanid,dvname,dvpid,dvtpid from vw_x_dvfile order by topdvid,llevel,dvid;--
    0000000001 0000000001 1 1001A110000000000V96 工控机 研华 IPC-610H PIV2.8/512MDDR/80GHDD/52XCD/网卡/键盘/鼠标 GK001 工业控制机 10
    0000000002 0000000001 2 1001A110000000000V96 电脑主板  联想661FX-M7 主板 0000000001 10
    0000000004 0000000001 2 1001A110000000000V96 硬盘 80G 硬盘 0000000001 10
    0000000003 0000000001 3 1001A110000000000VQJ CPU风扇 酷冷至尊 CPU 0000000002 10
    0000000006 0000000006 1 1001A110000000000V96 工控机 研华 IPC-610H PIV2.8/512MDDR/80GHDD/52XCD/网卡/键盘/鼠标 GK002 工业控制机 10
    0000000007 0000000006 2 1001A110000000000V96 硬盘 80G 硬盘 0000000006 10
    0000000008 0000000006 2 1001A110000000000V96 电脑主板  联想661FX-M7 主板 0000000006 10
    0000000009 0000000006 3 1001A110000000000VQJ CPU风扇 酷冷至尊 CPU 0000000008 10
    0000000012 0000000012 1 1001A110000000000VQM 工控机 研华 IPC-610H PIV2.8/512MDDR/80GHDD/52XCD/网卡/键盘/鼠标 GK003 工业控制机 10
    0000000005 0000000012 2 1001A110000000000V96 硬盘 80G 硬盘 0000000012 10
    0000000010 0000000012 2 1001A110000000000VQM 电脑主板  联想661FX-M7 主板 0000000012 10
    0000000011 0000000012 3 1001A110000000000VQM CPU风扇 酷冷至尊 CPU 0000000010 10
    0000000013 0000000013 1 1001A110000000000VQR 防水防尘防震高顶灯 金卤灯400W? Z1 测试设备 1004
    0000000014 0000000014 1 1001A110000000000V96 硬盘 80G 硬盘 10
    0000000015 0000000015 1 1001A110000000000VQJ 工控机 研华 IPC-610H PIV2.8/512MDDR/80GHDD/52XCD/网卡/键盘/鼠标 GK003 工业控制机 10
    0000000016 0000000015 2 1001A110000000000VQM 电脑主板  联想661FX-M7 主板 0000000015 10
    0000000018 0000000015 2 1001A110000000000V96 硬盘 80G 硬盘 0000000015 10
    0000000017 0000000015 3 1001A110000000000VQM CPU风扇 酷冷至尊 CPU 0000000016 10
    0000000019 0000000019 1 1001A110000000000V96 硬盘 80G 硬盘 10
    0000000020 0000000020 1 电脑 HP dx7500MT  NS039PA 自动化设备 10
    0000000021 0000000020 2 1001A110000000000VQL 电脑主板  联想661FX-M7 电脑主板 0000000020 10
      

  2.   

    create or replace view vw_x_dvfile
    as
    select a.*,--设备基础文件
    connect_by_root dvid as topdvid,
    level as llevel,
    b.invname,b.invcode,
    c.dainame,
    d.ddaname,
    e.ddtname,
    h.psnname dvusepsnname,i.deptname dvusedeptname,j.unitname dvusecorpname,
    o.psnname dvmanpsnname,p.deptname dvmandeptname,q.unitname dvmancorpname
    from dm_dvfile a 
    join bd_invbasdoc b on a.dvinvid=b.pk_invbasdoc
    left join dm_dvasmif c on a.dvif=c.daiid
    left join dm_dvasm d on a.dvasmid=d.ddaid
    join dm_dvtype e on a.dvtpid=e.ddtid
    left join bd_psndoc h on a.dvusepsn=h.pk_psndoc
    left join bd_psndoc o on a.dvmanpsn=o.pk_psndoc
    left join bd_deptdoc i on a.dvusedept=i.pk_deptdoc
    left join bd_deptdoc p on a.dvmandept=p.pk_deptdoc
    left join bd_corp j on a.dvusecorp=j.pk_corp
    left join bd_corp q on a.dvmancorp=q.pk_corp
    connect by a.dvpid=prior a.dvid start with dvpid  is null
    --oracle 10g版本
      

  3.   

    where level>1 
    这个写在外层嵌套看看结果对不
      

  4.   

    我小做了一下测试,在子查询中如果使用的列是涉及到创建视图时 join的列则可得到正确的结果,如果没有,就没有正确的结果,郁闷的很