2010-07-26 202 views
3

连接我有一个看起来有点像这样递归SQL子集查询,使用

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_IDs两个表,我需要它检查一个领土是否是其他的完全的子集的功能。 我一直在玩CONNECT BY和INTERSECT,但写了一个大混乱,而不是一个有用的功能。

我希望会有一个(相对)简单的SQL查询工作。

回答

3

大厦@Tony安卓回答这个问题会产生零行时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 
+0

谢谢!作品一种享受。 – colinjwebb 2010-07-27 08:50:42

2

鉴于查询以获得一个给定DEF_ID所有terrories(我不太肯定是你的表什么的),DEF_ID A是DEF_ID B的一个子集,如果下面的查询返回任何行:

select statement for A 
MINUS 
select statement for B 

这有帮助吗?

+0

这确实帮助,谢谢。我现在也需要去重新审视我的集合论:S – colinjwebb 2010-07-27 08:49:17