0

有没有办法让connect prior... start withOracle 中的语句从表中的第一个“孩子”开始,然后对所有剩余的孩子也运行查询?我知道如何为 1 个孩子使用该语句并获取其祖先,但我需要为表中的许多不同孩子运行代码。

假设我有这个代码,它从组件表和组件的父级返回一个组件和组件的颜色,它被归类为“样本”,它的颜色,其中组件的父级 ID 是组件的父级 ID。

这是我的架构:

Components table:
Component        Component_ID      Component_Parent_ID      Component_Label

Component_Color Table:
Component      Component_Color

注意:这是示例代码,不是我实际使用的代码,所以如果你犯了愚蠢的错误,我很抱歉。

SELECT Component,
  FROM Components
 INNER JOIN Component_Color ON (Components.Component =  Component_Color.Component)
 WHERE Component_Label = 'Sample'
connect by prior  Component_Header.Component_Parent_ID = Component_Header.Component_ID
  start with Component.Component_ID = '2000'; 

表组件有很多不同的组件,我希望查询不仅返回 ID 为 2000 的组件及其“样本”父组件,而且对表“组件”中的所有子组件执行此操作。

我可以看到如何使用循环来完成此操作,但我找不到可用于 Oracle 的循环类型。对不起,刚开始。

4

1 回答 1

0

避免在分层查询中使用WHEREandORDER BY子句,因为它们在分层处理之后运行。在这里我认为你应该使用START WITH component_label = 'Sample'.

 SELECT level, components.component_id, components.component_label, component_color.component_color
   FROM compenents JOIN component_color ON components.component = component_color.component
  START WITH components.component_label = 'Sample'
CONNECT BY PRIOR components.component_id = components.component_parent_id
于 2013-08-26T12:10:40.157 回答