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 :

[Requete SQL] Hierarchie dans une meme table


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Novembre 2006
    Messages : 131
    Points : 83
    Points
    83
    Par défaut [Requete SQL] Hierarchie dans une meme table
    Bonjour,

    J'ai une table sous la forme suivante :

    Personne(Id int, Nom varchar, Id_parent int, ...)

    Cette table contient des enregeristrements lié à des personnes, certaines personnes sont parent de certaines autre. Les personnes n'ayant pas de parent on leur 'Id_parent' à NULL.

    Je souhaiterai mettre en place une requête me permetant de retourner toutes les personnes ENFANT, petit enfant, etc... d'une personne donnée.

    NB : Je travail sous MsSql 2005.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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 115
    Points : 28 493
    Points
    28 493
    Par défaut
    Regarde du côté des requêtes récursives.

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    131
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Novembre 2006
    Messages : 131
    Points : 83
    Points
    83
    Par défaut
    Merci al1_24 de m'avoir mis sur la piste.

    Pour les gens que ça intéresse voici un exemple de la solution :

    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
    17
    18
    19
    20
     
    DECLARE @Id_personne int
    SET @Id_personne=1;
     
    WITH Table_CTE(Id, Nom, Niveau) AS 
    (
    SELECT Id, Nom, 0 AS Niveau
    FROM Personne
    WHERE Id_parent=@Id_personne
     
    UNION ALL
     
    SELECT e.Id, e.Nom, Niveau + 1
    FROM Personne e
    INNER JOIN Table_CTE d
    ON e.Id_parent= d.Id
    )
     
    SELECT Id, Nom
    FROM Table_CTE
    Plus de doc sur MSDN...

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2006
    Messages : 430
    Points : 103
    Points
    103
    Par défaut
    Salut jowsuket

    Je ne sais pas si tu existe encore sur ce site.

    J'ai le même problème mais un peu plus compliqué. car je n'ai pas le champ niveau.
    ma table contient seulement 2 champs : Fils et pere

    as tu une autre idée ?

    Merci.
    Citation Envoyé par jowsuket Voir le message
    Merci al1_24 de m'avoir mis sur la piste.

    Pour les gens que ça intéresse voici un exemple de la solution :

    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
    17
    18
    19
    20
     
    DECLARE @Id_personne int
    SET @Id_personne=1;
     
    WITH Table_CTE(Id, Nom, Niveau) AS 
    (
    SELECT Id, Nom, 0 AS Niveau
    FROM Personne
    WHERE Id_parent=@Id_personne
     
    UNION ALL
     
    SELECT e.Id, e.Nom, Niveau + 1
    FROM Personne e
    INNER JOIN Table_CTE d
    ON e.Id_parent= d.Id
    )
     
    SELECT Id, Nom
    FROM Table_CTE
    Plus de doc sur MSDN...

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 453
    Points : 18 394
    Points
    18 394
    Par défaut
    Sortir de SQL Server 2000, il a dix ans ce SGBD !

    Niveau n'est pas un champ de sa table mais une colonne de la CTE, construite à la volée.

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

Discussions similaires

  1. requete dans une meme table
    Par wade dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 09/07/2008, 14h33
  2. requete SQL multichamps/dans une liste de valeur
    Par maxidoove dans le forum Langage SQL
    Réponses: 2
    Dernier message: 28/07/2006, 16h48
  3. Comment executer une requete sql delete dans une jsp ?
    Par DarkWark dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 24/05/2006, 17h59
  4. [HIBERNATE] lier 2 bases de données dans une même table
    Par bondarenko dans le forum Hibernate
    Réponses: 4
    Dernier message: 31/03/2006, 17h01
  5. 2 auto increment dans une meme table
    Par gesualda dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 12/10/2005, 10h31

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