Вы можете поместить существующий запрос в 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 |