现在有个物料表,
1001 A物品
100101 A1物品
10010101 A11物品
100201 A2物品
另一个表是物品库存表,没有库存的话,此表没有记录。
10010101 A11库存为10最后想得出的结果是
1001 A物品 10
100101 A1物品 10
10010101 A11物品 10如果由最末级节点得出上一级节点,再上一级节点,如何实现?在sql语句还是程序?哪个更快一些?谢谢!
1001 A物品
100101 A1物品
10010101 A11物品
100201 A2物品
另一个表是物品库存表,没有库存的话,此表没有记录。
10010101 A11库存为10最后想得出的结果是
1001 A物品 10
100101 A1物品 10
10010101 A11物品 10如果由最末级节点得出上一级节点,再上一级节点,如何实现?在sql语句还是程序?哪个更快一些?谢谢!
按照你的题目:
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)这个能解决
把上面的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
比较好一点