IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

select recursif - connect by prior ?


Sujet :

Langage SQL

  1. #1
    Invité
    Invité(e)
    Par défaut select recursif - connect by prior ?
    Bonjour,
    Je voudrais faire un select récursif en sql (oracle).
    Cad boucler sur une table (node->parent) jusquà ce q'un champs ait une certaine valeur ...
    Example je suis un child et je veux obtenir la valeur 'itsme' lorsque mon premier parent avec la valeur true est rencontré.

    Parent 5 - false name=dumont
    Parent 4 - true name=itsme
    Parent 3 - false name=manager
    Parent 2 - false name=bigboss
    Parent 1 - false name=father
    child 0



    J'ai lu qu'il existait une méthode connect by prior mais je ne vois pas comment l'utiliser pour ce cas-ci.
    un idée ?
    Merci
    septentryon
    Dernière modification par Invité ; 06/08/2007 à 15h59.

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Je ne vois pas dans les données que tu présentes quelque chose qui représenterait une auto référence. Tu devrais donner la structure plus clairement.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Et bien on aurait une table comme celle-ci

    +------node----------+
    |Node_id number
    |Parent_id number
    |isrelevent boolean
    |name char
    +--------------------+

    et je voudrais faire un select du genre
    select n1.node_id n2.name from node n1, node n2
    (...)
    CONNECT BY PRIOR n2.parent_id = n1.node_id AND n2.isrelevent=true
    (...)
    je veux récuperer l'entrée de la table qui correspond à un de mes parents et ou le isrelevent = true ...
    C'est plus clair ?

    Merci
    Dernière modification par Invité ; 06/08/2007 à 16h50.

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Points : 2 579
    Points
    2 579
    Par défaut
    Teste ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select node_id, parent_id, name
    from node
    where isrelevent = true
    start with node_id = <id de ton noeud fils>
    connect by parent_id = node_id

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 920
    Points : 51 712
    Points
    51 712
    Billets dans le blog
    6
    Par défaut
    CONNECT BY PRIOR est spécifique à Oracle et n'a pas été retenu par la norme SQL car incapable de traiter des appels récursif correctement (en fait cela ne fonctionne que dans le cas d'arbres).

    Si vous voulez représenter des arbres avec de la performances, optez pour le mode de représentation intervallaire ou attendez qu'Oracle gère les requêtes récursives à la norme, c'est à dire avec la clause WITH des CTE.

    Lisez les articles que j'ai écrit sur le sujet...
    Sur le mode intervallaire de représentation des arboresences :
    http://sqlpro.developpez.com/cours/arborescence/
    Sur la récursivité et la CTE :
    http://www.sqlservercentral.com/colu...server2005.asp

    A +

Discussions similaires

  1. Réponses: 6
    Dernier message: 10/05/2006, 16h34
  2. [SQLSERVER] Connect by prior sous SQL Server
    Par marsup54 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 02/03/2006, 10h49
  3. quel équivalent de start with...connect by prior en DB?
    Par Mittou dans le forum Langage SQL
    Réponses: 5
    Dernier message: 18/10/2005, 15h02
  4. Réponses: 11
    Dernier message: 30/08/2005, 11h50
  5. [LG]tri selection récursif
    Par max_lupin dans le forum Langage
    Réponses: 2
    Dernier message: 15/04/2004, 23h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo