本帖最后由 gdalbert 于 2013-09-27 11:12:09 编辑

解决方案 »

  1.   

    递归查询:select * from course where id in(
    select * from course start with id=( select id from course where 科目 in ('course1'))
    connect by id=prior 前置ID union all
    select * from course start with id=( select id from course where 科目 in ('course1'))
    connect by prior id= 前置ID);
      

  2.   

    ORACLE提示值太多
    不过我已经在其他地方知道了。select ID,科目,前置id 
    from course 
    start with 科目='Course4' 
    connect by nocycle prior id=前置id or prior 前置id=id 
    order by id但还是要谢谢你!
      

  3.   

    WITH a AS
    (
    SELECT '4' id,'Courese1' Courese,' ' qzid FROM dual union all
    SELECT '5' id,'Courese2' Courese,'4' qzid FROM dual union all
    SELECT '6' id,'Courese3' Courese,'5' qzid FROM dual union all
    SELECT '7' id,'Courese4' Courese,'6' qzid FROM dual 
    )
    select level,e.* from a e  start with e.Courese='Courese2' connect by  e.id= prior e.qzid  
    order by level desc 不知道这个是不是能够满足你 
      

  4.   

    ORACLE提示值太多
    不过我已经在其他地方知道了。select ID,科目,前置id 
    from course 
    start with 科目='Course4' 
    connect by nocycle prior id=前置id or prior 前置id=id 
    order by id但还是要谢谢你!
    你要实现的是什么?.
    根据你的sql实现的是WITH a AS
    (
    SELECT '4' id,'Courese1' Courese,' ' qzid FROM dual union all
    SELECT '5' id,'Courese2' Courese,'4' qzid FROM dual union all
    SELECT '6' id,'Courese3' Courese,'5' qzid FROM dual union all
    SELECT '7' id,'Courese4' Courese,'6' qzid FROM dual 
    )
    select e.* from a e start with e.Courese='Courese3' connect by nocycle  prior e.id=e.qzid  or  prior e.qzid=e.id
    order by id   
    显示的是  
    6   Courese3  5