有一个BOM表的结构如下:
 parent_id      child_id
    a              b
    a              c
    a              d
    a              e
    c              f
    c              g
    e              h
    h              i
    h              j
    h              6用什么语句能查出所有最底层的child_id。
    

解决方案 »

  1.   

    你可以借鉴下~SELECT LEVEL
          ,T.*
      FROM (SELECT BOM.ASSEMBLY_ITEM_ID
                  ,BIC.COMPONENT_ITEM_ID
                  ,BOM.ORGANIZATION_ID
                  ,BIC.COMPONENT_QUANTITY
                  ,BOM.BILL_SEQUENCE_ID
              FROM BOM_BILL_OF_MATERIALS    BOM
                  ,BOM_INVENTORY_COMPONENTS BIC
             WHERE BOM.BILL_SEQUENCE_ID = BIC.BILL_SEQUENCE_ID
               AND BOM.ORGANIZATION_ID = 318) T
     START WITH T.ASSEMBLY_ITEM_ID = P_ITEM_ID
    CONNECT BY NOCYCLE PRIOR T.COMPONENT_ITEM_ID = T.ASSEMBLY_ITEM_ID;
      

  2.   

    select a.child_id from bom a where not exists (select 1 from bom b where a.child_id=b.parent_id)
      

  3.   


    select a.* from BOM a
     where child_id = (select min(child_id) from BOM where parent_id = a.parent_id)
     order by a.parent_id
      

  4.   


    select child_id from bom t where not exists(select 1 from bom where parent_id=t.child_id);
      

  5.   

    就是找不到上级结点,用不到循环遍历,只是个连接,或用not exists 如2楼
      

  6.   

    select parent_id ,child_id,(select sign(count(*) from bom where 0=(select count(*) from bom a where a.parent_id =t.child_id ))) as 最底层
    from bom t
      

  7.   

    select a.child_id from bom a where not exists (select 1 from bom b where a.child_id=b.parent_id)
    不错
      

  8.   

    楼猪搜一下START WITH CONNECT BY和LEVEL的用法