Рекурсивный sql-запрос подмножества с использованием connect by - PullRequest
3 голосов
/ 26 июля 2010

У меня есть две таблицы, которые выглядят примерно так:

AGR_TERR_DEF_TERRS
  ID
  DEF_ID
  TERRITORY_ID (foreign key links to TERRITORIES.ID)

TERRITORIES
  ID
  NAME
  PARENT_ID
(parent_id and id are recursive)

Учитывая два DEF_ID, мне нужна функция, которая проверяет, является ли территория одной подмножествой другой.Я играл с CONNECT BY и INTERSECT, но написал большой беспорядок, а не полезную функцию.

Я надеюсь, что будет (относительно) простой SQL-запрос, который будет работать.

Ответы [ 2 ]

3 голосов
/ 26 июля 2010

Опираясь на ответ @Tony Andrews, получится ноль строк, когда территории, подразумеваемые def_id_1, являются подмножеством территорий для def_id_2,

select id from territories start with id in
  (select territory_id from agr_terr_def_terrs where def_id = :def_id_1)
  connect by parent_id = prior id
minus
select id from territories start with id in
  (select territory_id from agr_terr_def_terrs where def_id = :def_id_2)
  connect by parent_id = prior id
2 голосов
/ 26 июля 2010

Учитывая запрос, чтобы получить все территории для данного DEF_ID (я не совсем уверен, что это с вашими таблицами), DEF_ID A является подмножеством DEF_ID B, если следующий запрос не возвращает строк:

select statement for A
MINUS
select statement for B

Это помогает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...