繁体   English   中英

使用 SQL 有没有办法比较一个节点是否在任何一组节点的父层次结构中?

[英]Using SQL is there a way to compare if a node is in the parent hierarchy of any of a set of nodes?

我需要搜索我的层次结构以返回高于或等于子查询中返回的任何节点的所有节点。

给定表:H

Child | Parent
  A1  | A
  A2  | A
  A1b | A1
  A2a | A2
  A2b | A2
  B1  | B
  B3  | B
  B1c | B1
  B3a | B3

子查询返回:

A2a
A2b
B3

我需要一个使用子查询结果返回的查询。

A
A2
A2a
A2b
B
B3

我一直在尝试使用this SO question中的查询来解决它,但到目前为止还没有运气。

您可以将现有查询放在 CTE 中,然后设置分层查询,如:

WITH q(id) AS ( ... )
SELECT id FROM q
UNION ALL
SELECT DISTINCT Parent
FROM mytable
CONNECT BY PRIOR Parent = Child
START WITH Child in (SELECT id FROM q)
ORDER BY id

使用您的示例数据在 DB Fiddle 上进行演示

WITH q(id) AS (
    SELECT 'A2a' FROM DUAL
    UNION ALL SELECT 'A2b' FROM DUAL
    UNION ALL SELECT 'B3' FROM DUAL
)
SELECT id FROM q
UNION ALL
SELECT DISTINCT Parent
FROM mytable
CONNECT BY PRIOR Parent = Child
START WITH Child in (SELECT id FROM q)
ORDER BY id
| ID  |
| :-- |
| A   |
| A2  |
| A2a |
| A2b |
| B   |
| B3  |

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM