在 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
我的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