日期:2014-05-17  浏览次数:20742 次

一sql语句
有两个表:Parent与Component
如果一个物料是由其它物料制作而成,则这个物料在Parent中,其它用来制作的物料在Component中。
但是做成的物料又可以用来制作其它物料。这样一层套一层。

我想查找最原始的物料(在Component中存在,但是在Parent不存在)做出的最终成品(在Parent中存在,但是在Component中不存在)。现在最主要就是做出的成品中间可以有多个加工的物料并不要显示。

求:最原始的物料最终做成那些成品?


------解决方案--------------------
使用层次查询
start with
connect by
------解决方案--------------------
select * from Component c where not exists (select 1 from Parent p where c.xxx = p.xxx);

select * from Component c where c.xxx not in (select xxx from Patent p);
不知道你们中间是啥关联关系,你自己看看转成你要的东西吧。?

你说的那个关系只是你想要的查询结果,不是表的关联关系。
------解决方案--------------------
意思我懂了。Component存放的是半成品和最原始的原料,半成品可以制成成品存放在parent表中,而parent表中还存放有Component中最原始原料制成的半成品。parent表中的记录跟Component表中是一对多的关系!两个表中应该有相同记录吧?去除掉的话,就剩下父节点(最顶层的),和叶节点(最下层的)!