有两个表:Parent与Component
如果一个物料是由其它物料制作而成,则这个物料在Parent中,其它用来制作的物料在Component中。
但是做成的物料又可以用来制作其它物料。这样一层套一层。我想查找最原始的物料(在Component中存在,但是在Parent不存在)做出的最终成品(在Parent中存在,但是在Component中不存在)。现在最主要就是做出的成品中间可以有多个加工的物料并不要显示。求:最原始的物料最终做成那些成品?
如果一个物料是由其它物料制作而成,则这个物料在Parent中,其它用来制作的物料在Component中。
但是做成的物料又可以用来制作其它物料。这样一层套一层。我想查找最原始的物料(在Component中存在,但是在Parent不存在)做出的最终成品(在Parent中存在,但是在Component中不存在)。现在最主要就是做出的成品中间可以有多个加工的物料并不要显示。求:最原始的物料最终做成那些成品?
2个表的关系不太明白~~
start with
connect by
不知道你们中间是啥关联关系,你自己看看转成你要的东西吧。 你说的那个关系只是你想要的查询结果,不是表的关联关系。
由EMPNO和MGR关联 而我现在所做的视图和Scott.emp一样,不过是多对多关系。由PARENT_ID和COMPONENT_ID关联select lpad(level,level*3,' '),spci.COMPONENT_ITEM,spci.PARENT_ITEM
from Item spci
connect by prior spci.COMPONENT_ID = spci.PARENT_ID
start with spci.PARENT_ITEM = :P_ITEM求出来的数据我不需要中间的那些层。 例如:我只要PRESIDENT管理的最下层人员
--添加一层查询,伪造一个层级出来,然后只显示最低层级和最高层级。
WITH t AS
(SELECT '总原料1' AS code,
10000 AS amount,
0 AS res,
1 AS dist,
'总用途1' AS costType
FROM dual
UNION ALL
SELECT '原料1',500,1,2,'用途1' FROM dual
UNION ALL
SELECT '原料2', 1000, 2 ,3, '用途2' FROM dual
UNION ALL
SELECT '原料3', 2000, 2 ,4, '用途3' FROM dual
UNION ALL
SELECT '总原料2', 5000, 0, 5 ,'总用途2' FROM dual
UNION ALL
SELECT '原料4', 100, 5 ,6, '用途4' FROM dual
UNION ALL
SELECT '原料5', 100, 6 ,7, '用途5' FROM dual
)
SELECT *
FROM
(SELECT code,
amount,
res,
dist,
costtype,
level AS lvl
FROM t
START WITH res = 0
CONNECT BY res = prior dist
)
WHERE lvl = 1
OR lvl =
(SELECT MAX(lvl) FROM (
SELECT code,
amount,
res,
dist,
costtype,
level AS lvl
FROM t
START WITH res = 0
CONNECT BY res = prior dist) a
)
select lpad(level,level*3,' '),spci.COMPONENT_ITEM,spci.PARENT_ITEM
from Item spci
where connect_by_isleaf = 1
connect by prior spci.COMPONENT_ID = spci.PARENT_ID
start with spci.PARENT_ITEM = :P_ITEM
from Item spci
where connect_by_isleaf = 1
connect by prior spci.COMPONENT_ID = spci.PARENT_ID
start with spci.PARENT_ITEM = :P_ITEM楼上这种方法非常好,但是一次只能求出一个 :P_ITEM 。我有很多这样的树,一下怎么全部求出来呢