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

SQL Oracle Discussion :

sommets d'une jointure récursive


Sujet :

SQL Oracle

  1. #1
    cdu
    cdu est déconnecté
    Membre expérimenté
    Profil pro
    Inscrit en
    Août 2004
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 196
    Par défaut sommets d'une jointure récursive
    Bonjour,
    Sur une base oracle, je fais une jointure récursive avec la syntaxe suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select level, parent || 'est supérieur de ' ||enfant
    from arbre
    connect parent = prior enfant
    j'obtiens un résultat du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    1 A est supérieur de B
    1 A est supérieur de C
    2 C est supérieur de D
    3 D est supérieur de E
    3 D est supérieur de F
    2 C est supérieur de G
    1 H est supérieur de D
    2 D est supérieur de E
    2 D est supérieur de F
    il faudrait que je puisse au niveau de chaque ligne connaitre le sommet de son arborescence.
    C'est à dire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    1 A est supérieur de B le sommet est A
    1 A est supérieur de C le sommet est A
    2 C est supérieur de D le sommet est A
    3 D est supérieur de E le sommet est A
    3 D est supérieur de F le sommet est A
    2 C est supérieur de G le sommet est A
    1 H est supérieur de D le sommet est H
    2 D est supérieur de E le sommet est H
    2 D est supérieur de F le sommet est H
    Merci

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Je crois qu'avec sys_connect_by_path tu peux voir la liste du chemin.
    Avec un jeu de données, ça m'aurait arrangé.
    Je vais voir avec ta requête.

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Quelle est votre version d'Oracle ?

  4. #4
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    C'est bien ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    WITH t AS (
    			SELECT '' PARENT, 'A' enfant FROM dual
    UNION ALL SELECT 'A' PARENT, 'B' enfant FROM dual
    UNION ALL SELECT 'A' PARENT, 'C' enfant FROM dual
    UNION ALL SELECT 'C' PARENT, 'D' enfant FROM dual
    UNION ALL SELECT 'D' PARENT, 'E' enfant FROM dual
    UNION ALL SELECT '' PARENT, 'H' enfant FROM dual
    UNION ALL SELECT 'D' PARENT, 'F' enfant FROM dual
    UNION ALL SELECT 'C' PARENT, 'G' enfant FROM dual
    UNION ALL SELECT 'H' PARENT, 'D' enfant FROM dual
    )
    SELECT LEVEL, PARENT || ' => ' ||enfant donnee, LTRIM(SYS_CONNECT_BY_PATH(PARENT, '/'), '/') AS chemin
    FROM t
    WHERE PARENT IS NOT NULL
    CONNECT BY PARENT = PRIOR enfant
    START WITH PARENT IS NULL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    LEVEL	DONNEE	CHEMIN
    2	A => B	A
    2	A => C	A
    3	C => D	A/C
    4	D => E	A/C/D
    4	D => F	A/C/D
    3	C => G	A/C
    2	H => D	H
    3	D => E	H/D
    3	D => F	H/D

  5. #5
    cdu
    cdu est déconnecté
    Membre expérimenté
    Profil pro
    Inscrit en
    Août 2004
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 196
    Par défaut
    La syntaxe fournie par McM correspond, mais Waldar a bien anticipé le problème, je suis sur une base 8i.

    Existe t il une syntaxe dans cette version ?

  6. #6
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    si tu es en 8.1.7.4 tu peux faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alter session set "_new_connect_by_enabled"=TRUE;
    et le sys_connect_by_path devient possible...

    PS: 8i c'est un logiciel datant du siècle passé...

  7. #7
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Citation Envoyé par laurentschneider Voir le message
    PS: 8i c'est un logiciel datant du siècle passé...
    Même du millénaire

  8. #8
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    au millénaire passé on en a brulé pour moins que ça

  9. #9
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Par défaut
    si tu posais la question de la version c'était pour savoir si CONNECT_BY_ROOT existait, tu ne t'attendais sûrement pas à une version précambrienne

  10. #10
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Exactement !

Discussions similaires

  1. Réponses: 3
    Dernier message: 03/03/2010, 19h05
  2. [CR9] faire une Jointure externe
    Par coldec dans le forum SAP Crystal Reports
    Réponses: 5
    Dernier message: 28/06/2005, 12h10
  3. probleme d'espace qui fausse une jointure
    Par Nadaa dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/08/2004, 11h52
  4. Comment optimiser une jointure ?
    Par seb_asm dans le forum Administration
    Réponses: 21
    Dernier message: 25/06/2004, 16h42
  5. Lignes en double dans le résultat d'une jointure
    Par ledevelopeur dans le forum Bases de données
    Réponses: 4
    Dernier message: 02/06/2004, 18h10

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