2010-07-26 39 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