oracle的start with connect by prior是根據條件遞歸查詢"樹",分為四種使用情況:
第一種:start with 子節點ID='...' connect by prior 子節點ID = 父節點ID
select * from mdm_organization o start with o.org_code='10000008' connect by prior o.org_code=o.org_parent_code
按照條件org_code='10000008',對'10000008'(包括自己)及其子節點進行遞歸查詢,結果如下

查詢結果自己所有的後代節點(包括自己)。
第二種:start with 子節點ID='...' connect by 子節點ID = prior 父節點ID(prior 父節點id = 子節點id)
select * from mdm_organization o start with o.org_code='10000008' connect by o.org_code=prior o.org_parent_code
按照條件org_code='10000008',對'10000008'(包括自己)及其父節點進行遞歸查詢,結果如下
查詢結果自己所有的前代節點(包括自己)。
第三種:start with 父節點ID='...' connect by prior 子節點ID = 父節點ID
select * from mdm_organization o start with o.org_parent_code='10000008' connect by prior o.org_code=o.org_parent_code
按照條件org_parent_code='10000008',對'10000008'(不包括自己)子節點進行遞歸查詢,結果如下
查詢結果自己所有的後代節點(不包括自己)。
第四種:start with 父節點ID='...' connect by 子節點ID = prior 父節點ID(prior 父節點id=子節點id)
select * from mdm_organization o start with o.org_parent_code='10000008' connect by o.org_code = prior o.org_parent_code
按照條件org_parent_code='10000008',對'10000008'(包括自己)的第一代孩子們及其父節點進行遞歸查詢,結果如下
查詢結果自己的第一代後節點和所有的前代節點(包括自己)。
如果有where 條件,如下
select * from mdm_organization o where 條件 start with o.org_parent_code='10000008' connect by o.org_code = prior o.org_parent_code
執行順序為先執行start with connect by prior,然後再按照where條件進行過濾。