1

我有以下表结构:

ORGANIZATION_ID   | Name  |  PARENT_ID
--------------------------------------------------
1                 | A     |     0   -Indicates root
2                 | B     |     1
3                 | C     |     2
4                 | D     |     2
5                 | E     |     4
6                 | F     |     1
7                 | G     |     1
8                 | H     |     7
9                 | J     |     8
10                | K     |     9

我不擅长编写 Oracle SQL 查询。*如果我传入某个组织 ID,如何生成所有 () 子组织的列表?

例如,如果我传入2,从逻辑上讲,我会查找所有父 ID 为 2 的行,然后我会递归地查看这些行中的每一行做同样的事情。

我知道逻辑,如何在 oracle 中使用 sql 查询重新创建它?

4

2 回答 2

3

CONNECT BY可用于进行此递归查询:

SELECT organization_id, name
FROM t
CONNECT BY PRIOR organization_id = parent_id
START WITH organization_id = 2
于 2012-06-20T13:46:09.773 回答
2

如果您使用 Oracle 11g,则可以选择 Oracle 递归子查询。

with orgs (organization_id, name, parent_id) as (
    select organization_id, name, parent_id 
        from organization
        where organization_id=2
    union all
        select organization_id, name, parent_id 
        from organization org join orgs on org.parent_id=orgs.organization_id)
search depth first by organization_id set a
select organization_id, name
from orgs;
于 2012-09-10T15:15:04.870 回答