Иерархические запросы Oracle: выберите минимальное или максимальное значение для каждого уровня, кроме одного условия - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть таблица с рекурсивными данными. я оставил данные соединения из другой таблицы, чтобы получить дополнительную информацию об этом объекте. первые 2 столбца взяты из таблицы A, последний столбец - из таблицы B. Результат выглядит следующим образом:

+-------+--------+------+
| CHILD | PARENT | B_ID |
+-------+--------+------+
|   1   |  null  | null |
|   2   |   1    | 100  |
|   3   |  null  | null |
|   4   |   3    | null |
|   5   |   4    | 101  |
|   6   |  null  | null |
|   7   |   6    | null |
|   8   |   7    | null |
|   9   |   7    | 102  |
|   10  |   9    | 103  |
+-------+--------+------+

что было сделано для запроса данных с иерархической функцией:

select child, parent, b_id
from table_a
left join table_b on table_a.child = table_b.id
start with parent is null
connect by prior child = parent
order siblings by child

моя проблема заключается в том, что для каждого уровня у меня может быть более 1 B_ID. то, что мне нужно знать, это только 1 B_ID, который отражает таблицу B в качестве ссылки. кроме всех потомков с parent = 1, в этом случае мне нужны все строки. я бы использовал внутреннее соединение, но мне нужен путь к этой ссылочной строке, а дополнительная информация (в таблице C) относится к дочерним 6, 7, 8 и / или 9.

+-------+--------+------+
| CHILD | PARENT | B_ID |
+-------+--------+------+
|   6   |  null  | null |
|   7   |   6    | null |
|   8   |   7    | null |
|   9   |   7    | 102  |
+-------+--------+------+

у вас естьЕсть идеи, как решить эту проблему?

...