3

我有两张看起来有点像这样的桌子

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 查询有效。

4

2 回答 2

3

基于@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
于 2010-07-26T16:12:10.493 回答
2

给定查询以获取给定 DEF_ID 的所有恐怖(我不太确定您的表是什么),如果以下查询不返回任何行,则 DEF_ID A 是 DEF_ID B 的子集:

select statement for A
MINUS
select statement for B

这有帮助吗?

于 2010-07-26T15:53:01.707 回答