比如:表名:unit (单位)
     字段:unit_id(单位号,主键),unit_name(单位名),parent_id(上级单位号)
现在要查询一个单位的上级和下级,同级的过滤掉。
如何写一个sql语句。

解决方案 »

  1.   

    select *
    from unit
    start with unit_id='查询条件'
    CONNECT BY PRIOR unit_id=parent_id
      

  2.   

    CREATE TABLE unit
    (
    unit_id  NUMBER,
    unit_name VARCHAR2(100),
    parent_id NUMBER
    );INSERT INTO UNIT
    SELECT '1','LEVEL1',''
    FROM DUAL
    UNION 
    SELECT '12','LEVEL12','1'
    FROM DUAL
    UNION 
    SELECT '13','LEVEL13','1'
    FROM DUAL
    UNION 
    SELECT '121','LEVEL121','12'
    FROM DUAL
    UNION 
    SELECT '131','LEVEL131','13'
    FROM DUAL
    UNION 
    SELECT '122','LEVEL122','121'
    FROM DUAL
    UNION 
    SELECT '132','LEVEL132','131'
    FROM DUAL;
    SELECT LEVEL,
           T.UNIT_ID
           ,T.UNIT_NAME
    FROM UNIT T
    START WITH T.UNIT_ID = 12
    CONNECT BY PRIOR T.UNIT_ID = T.PARENT_ID 
    UNION
    SELECT LEVEL,
           T.UNIT_ID
           ,T.UNIT_NAME
    FROM UNIT T
    START WITH T.UNIT_ID = 12
    CONNECT BY PRIOR T.PARENT_ID = T.UNIT_ID
      

  3.   

    上面写错了,应该是
    select * 
    from unit 
    start with unit_id='查询条件' 
    CONNECT BY PRIOR parent_id=unit_id
      

  4.   


    用層次化查詢去做
    這樣是最好的
    START WITH
    CONNECT BY