Oracle Hierarchical Query - получить записи в иерархии, где дочерние элементы находятся в списке

У меня есть таблица с родительскими, дочерними отношениями. В другой таблице у меня есть список членов, которые находятся в первой таблице.

Что я хотел бы сделать, так это отфильтровать первую таблицу по членам, которые являются родителями члена во второй таблице, или членов второй таблицы. Я надеюсь, что моя проблема ясна, если нет, пожалуйста, спросите.

База данных Oracle 10g.


person bidi    schedule 29.04.2015    source источник
comment
Пожалуйста, покажите определения таблиц и образцы данных для каждой таблицы, а также ожидаемый результат и то, что вы пробовали.   -  person OldProgrammer    schedule 29.04.2015
comment
Итак, вам нужны все листья и их родители? Для чего нужен второй стол?   -  person xQbert    schedule 29.04.2015


Ответы (1)


Допустим, у вас есть эта иерархия в таблице TH, а в таблице участников TM есть три строки «GC Carl», «PT Mike», «PT Mary» (отмечены зеленым).

введите здесь описание изображения

Чтобы найти всех их родителей, бабушек и дедушек и т. д. (отмечены желтым цветом), вам понадобится этот простой иерархический запрос:

select distinct id
  from th
  connect by id = prior pid
  start with id in (select id from tm)

демонстрация SQLFiddle

Если вы ищете только родителей и вам нужно сделать это иерархически, то:

select distinct id
  from th
  connect by id = prior pid and level <= 2
  start with id in (select id from tm)

(Мартин исключен, потому что он не является родителем ни для одного участника и отсутствует в TM).

Если это не то, что вы хотели, вам обязательно следует уточнить свой запрос, добавить образцы входных данных и желаемый результат.

person Ponder Stibbons    schedule 29.04.2015