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

PL/SQL Oracle Discussion :

Récursivité, CONNECT BY avec un IN ?


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Mars 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 7
    Par défaut Récursivité, CONNECT BY avec un IN ?
    Bonjour,

    J'ai une table qui contient ID_PERE et ID_LIST_FILS comme ceci :

    ID_PERE      ID_LIST_FILS
    -------------------------
    10             1;2;3
    1               4;5
    20             6;7
    4               8;9
    5               10;11
    ...
    Si chaque père n'avait qu'un unique fils le CONNECT BY ID_PERE = ID_LIST_FILS donnerait la liste père-fils, mais dans mon cas ce n'est pas possible et un CONNECT BY IN ne fonctionne pas.
    Est-ce possible d'obtenir la liste la liste du ID_PERE 1 (par exemple) avec une requete SQL pour obtenir : 4 5 8 9 10 11 ?

    Merci
    Thomas

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    Le problème de base est que votre modélisation n'est pas correcte.
    La bonne structure serait de la forme (ID_PERE, ID_FILS) avec un seul fils par ligne de la table.

    Après, vous pouvez vous sortir de cette erreur en effectuant la jointure avec l'expression ';' || id_list_fils || ';' LIKE '%;' || id_pere || ';%' mais vous perdez la possibilité d'utiliser un index sur l'une de ces deux colonnes, ce qui sera préjudiciable aux performances.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 954
    Par défaut
    Non pas directement, ID_LIST_FILS est une erreur de conception qui ne respecte pas la 1NF.

    Il faut d'abord éclater la colonne en ligne, pour ça regarde :
    [Oracle 10g]Transformer les éléments d'une liste en enregistrement

    Et le mieux est de ne le faire qu'une fois pour renormaliser la table, si ça a trop d'impact en terme de dev, crée une vue.

  4. #4
    Membre habitué
    Inscrit en
    Mars 2009
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 7
    Par défaut
    En effet il ne m'est pas possible de modifier l'application existante, cela demanderait beaucoup trop de développement... Je vais donc utiliser la jointure avec le like. Ce cas sera très rarement utilisé donc cette solution conviendra.
    Merci.
    Thomas

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. CONNECTION ODBC avec DB POSTGRE
    Par wallior dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 01/08/2005, 16h59
  2. connection SYS avec oracle10g
    Par matana dans le forum Oracle
    Réponses: 4
    Dernier message: 02/06/2005, 17h55
  3. connection postgresl avec asp + pilote odbc
    Par tony_montana dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 26/01/2005, 16h25
  4. Réponses: 1
    Dernier message: 24/08/2004, 18h10
  5. Connection ADSL avec un routeur
    Par SebCBien dans le forum Réseau
    Réponses: 18
    Dernier message: 14/08/2004, 18h43

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