有没有办法让Oracle中的connect prior... start with
语句从表中的第一个“子”开始,然后对所有剩余的子项运行查询?我知道如何使用1个孩子的语句并获得它的祖先,但我需要代码在表中运行许多不同的孩子。
假设我有这个代码,它从组件表和Component的父组件返回Component和Component的Color,并将其分类为“Sample”及其颜色,其中组件的父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';
Table Component有很多不同的组件,我希望查询不仅返回ID为2000的组件及其“sample”父组件,而且还要为“组件”表中的所有子组件执行此操作。
我可以看到如何通过循环完成此操作,但我找不到可以用于Oracle的循环类型。对不起,刚刚开始。
答案 0 :(得分:0)
避免在分层查询中使用WHERE
和ORDER 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