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 :

Requête - Cas pratique pas si évident


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de xess91
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 408
    Par défaut Requête - Cas pratique pas si évident
    Bonjour à tous,

    Voici le problème:

    J'ai une table qui contient 3 colonnes: id name parentId
    Elle contient:
    id | name | parentId
    1 | n1 | 2
    2 | n2 | 4
    3 | n3 |
    4 | n4 | 7
    5 | n5 | 3
    6 | n6 | 3
    7 | n7 |
    Le but était de faire une auto-jointure pour récupérer les branches (les parents ou enfants) d'une entrée avec par exemple avec comme clause where id = 1.

    On peut constater l'abre suivant:

    n7 -> n4 -> n2 -> n1
    avec la clause where id = 3, on peut constater l'arbre suivant qui a deux branches:

    -> n6
    n3
    -> n5
    Mais ça ne fonctionne pas le script s'arrête à une entrée. Comment arriver à se résultat en sql? Est-ce possible de faire ça sans faire une fonction récursive qui envoie des requêtes sql?

    Merci à tous pour votre aide .

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    Bonjour,

    La recurssion c'est par ici : http://sqlpro.developpez.com/cours/s...te-recursives/

    Ensuite, selon votre SGBD, vous pouvez avoir d'autre méthode.

  3. #3
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 602
    Par défaut
    Bonjour

    Quel est votre SGBD ?

    Si c'est Oracle, la solution réside dans ce type de requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
         select connect_by_isleaf, 
               level, 
               id, 
               idParent
          from theTable
              start with id = THEFIRSTID
                connect by prior idParent = id;
    Notez les pseudo-colonne connect_by_isleaf et level.
    Notez aussi que connect by prior idParent = id n'est pas identique à connect by prior id= idParent (on fait l'affectation dans un sens ou l'autre suivant qu'on veut parcourir vers les parents ou vers les enfants).

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 602
    Par défaut
    Citation Envoyé par punkoff Voir le message
    Bonjour,

    La recurssion c'est par ici : http://sqlpro.developpez.com/cours/s...te-recursives/
    Il n'y a pas une légére erreur dans le titre ? je ne connais aucune version de Sql Server qui s'appelle Sql Server 2003.

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    Bonjour,

    Demandez à SQLPro vu que c'est lui qui a fait l'article.
    Le contenu, lui, est intéressant et applicable à de nombreux SGBD

  6. #6
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 602
    Par défaut
    Bonjour,

    Citation Envoyé par punkoff Voir le message
    Demandez à SQLPro vu que c'est lui qui a fait l'article.
    Pas la peine, car c'est un détail et, de plus, il va passer par là tôt ou tard.

    Le contenu, lui, est intéressant et applicable à de nombreux SGBD
    Tout à fait, mais il existe sur Oracle une autre solution utilisant des instructions spécifiques, comme je le mentionne supra.

    De ce fait il serait intéressant que le PO mentionne le SGBD utilisé.

  7. #7
    Membre éclairé Avatar de xess91
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 408
    Par défaut
    Merci pour vos réponses je vais les étudier. Gros oublie de ma part la base de données c'est MySql!

Discussions similaires

  1. [MySQL] Une requête n'aboutissant pas
    Par Livingstone dans le forum Langage SQL
    Réponses: 6
    Dernier message: 13/02/2006, 10h36
  2. HTML/IFRAME : cas pratique à étudier pour confirmé
    Par Naos2 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 27/01/2006, 14h39
  3. [Oracle 9.i] Requête qui passe pas
    Par ftrifiro dans le forum Langage SQL
    Réponses: 7
    Dernier message: 20/12/2005, 17h32
  4. Réponses: 4
    Dernier message: 04/07/2005, 09h36
  5. Réponses: 3
    Dernier message: 16/11/2004, 15h51

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