在 Oracle 10g 中查找任何父节点的所有子节点

Find all child nodes for any parent node in Oracle 10g

我的table结构是:

COMPANY_ID, ID, PARENT_ID

这是table的一部分:

     | COMPANY_ID |     ID      |  PARENT_DID |
     |------------|-------------|-------------|
     | 12         |      1      |    null     |
     | 12         |      3      |     1       |
     | 12         |      2      |     1       |
     | 12         |      4      |     3       |
     | 12         |      7      |     4       |
     | 14         |      3      |     null    |

我想在 Oracle 10g 中查找任何 ID 的所有子 ID 和孙 ID。对于 COMPANY_ID=12 和 ID=3:

,结果必须是这样的

3, 4, 7

我已经试过了,但是没用:

SELECT id
FROM TABLE_NAME
  START WITH ID        = 3
  CONNECT BY PARENT_ID = PRIOR ID
AND COMPANY_ID=12;

您需要使用另一个 PRIOR 子句将其限制为同一公司 ID,并将您要查找的特定公司 ID 移动到 START WITH 子句中:

SELECT id
FROM TABLE_NAME
START WITH ID = 3 AND COMPANY_ID = 12
CONNECT BY PARENT_ID = PRIOR ID AND COMPANY_ID = PRIOR COMPANY_ID;

        ID
----------
         3 
         4 
         7 

如果您指定多个起始 ID(正如您在评论中提到的),您可能会得到重复的 ID,您可以使用 DISTINCT 来抑制这些 ID;但是如果您想查看哪些后代与您的哪些起始 ID 相关,可以使用方便的 connect_by_root operator 来跟踪它;例如:

SELECT CONNECT_BY_ROOT id AS root_id, id AS id
FROM TABLE_NAME
START WITH ID IN (3, 7)
AND COMPANY_ID = 12
CONNECT BY PARENT_ID = PRIOR ID and COMPANY_ID = PRIOR COMPANY_ID;

   ROOT_ID         ID
---------- ----------
         3          3 
         3          4 
         3          7 
         7          7