现在有个物料表,
1001 A物品 
100101 A1物品
10010101 A11物品
100201 A2物品
另一个表是物品库存表,没有库存的话,此表没有记录。
10010101 A11库存为10最后想得出的结果是
1001 A物品           10
100101 A1物品        10
10010101 A11物品    10如果由最末级节点得出上一级节点,再上一级节点,如何实现?在sql语句还是程序?哪个更快一些?谢谢!

解决方案 »

  1.   

    where code like '1001%' order by code如果要得到上一级,截字符串就可以了
      

  2.   

    你的品目id有问题,如果按照你这样写那么肯定 层次很少。
    按照你的题目:
    CREATE TABLE niu_bom_items(
    item_id VARCHAR2(30),
    item_name VARCHAR2(100)--,
    --prior_item_id VARCHAR2(30)
    );
    INSERT INTO niu_bom_items
    SELECT '10','物品'--,NULL
    FROM dual
    UNION
    SELECT '1001','A物品'--,'10'
    FROM dual
    UNION
    SELECT '100101','A1物品'--,'1001'
    FROM dual
    UNION
    SELECT '10010101','A11物品'--,'100101'
    FROM dual
    UNION
    SELECT '1002','B物品'--,'10'
    FROM dual
    UNION
    SELECT '100201','B1物品'--,'1002'
    FROM dual;CREATE TABLE niu_inv_onhand(
    item_id VARCHAR2(30),
    on_hand NUMBER
    );
    INSERT INTO niu_inv_onhand
    SELECT '1001',11
    FROM dual
    UNION
    SELECT '100101',22
    FROM dual
    UNION
    SELECT '10010101',33
    FROM dual
    UNION
    SELECT '1002',44
    FROM dual
    UNION
    SELECT '100201',55
    FROM dual;SELECT LEVEL,
            nbi.item_id    item_id,
            nbi.item_name  item_name,
            nio.on_hand     on_hand  
    FROM niu_bom_items nbi,
          niu_inv_onhand nio
    WHERE nbi.item_id = nio.item_id(+)
    START WITH nbi.item_id = '10'
    CONNECT BY PRIOR nbi.item_id = substr(nbi.item_id,1,length(nbi.item_id)-2)这个能解决
      

  3.   

    建议你加一个字段存上层id
    把上面的sql注释打开,
    sql参照:SELECT LEVEL,
            nbi.item_id    item_id,
            nbi.item_name  item_name,
            nio.on_hand     on_hand  
    FROM niu_bom_items nbi,
          niu_inv_onhand nio
    WHERE nbi.item_id = nio.item_id(+)
    START WITH nbi.item_id = '10'
    CONNECT BY PRIOR nbi.item_id = nbi.prior_item_id
    比较好一点