2010-07-26 6 views
3

J'ai deux tables qui ont l'air un peu comme cerécursive requête sous-ensemble sql, en utilisant la connexion par

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) 

Compte tenu deux DEF_IDs, je besoin d'une fonction qui vérifie si les territoires de l'un est un sous-ensemble complet de l'autre . J'ai joué avec CONNECT BY et INTERSECT, mais j'ai écrit un gros désordre plutôt qu'une fonction utile. Je souhaite qu'il y aura une requête SQL (relativement) facile qui fonctionne.

Répondre

3

bâtiment sur @Tony Andrews répondre à cette produirait aucune ligne lorsque les territoires sont sous-entendus par def_id_1 un sous-ensemble de ceux pour 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

Merci! Fonctionne un régal. – colinjwebb

2

Compte tenu de la requête pour obtenir tous les terrories pour un DEF_ID donné (je ne suis pas tout à fait sûr de ce qui est avec vos tables), DEF_ID A est un sous-ensemble de DEF_ID B si la requête suivante retourne aucune ligne:

select statement for A 
MINUS 
select statement for B 

Cela aide-t-il?

+0

Cela a aidé, merci. Je dois aussi maintenant aller revisiter ma théorie des ensembles: S – colinjwebb