{SQL} Sélectionner tous les sous-enfants

Bonsoir,

J’ai un petit soucis d’ordre algorithmique.

Une application gère (dans une base de données) des sociétés (ID, raison sociale, ID de la société parente, etc.).

J’aimerais sélectionner une société et toutes les sociétés enfants de celle-ci.

Exemple :
Jeu de données :[quote=""]

  • ID : RS : IDparent
  • 43 : M6 : NULL
  • 27 : Clubic : 43
  • 12 : Achetez-Facile : 43
  • 18 : Achetez-Lingerie : 12
  • 56 : TF1 : NULL
  • 75 : TFou : 56
  • 79 : TFou Senior : 75
    [/quote]
    J’aimerais donc avoir le SELECT pour disons, sélectionner la société M6 (n°43) et les sociétés enfants de celle-ci.
    Je devrais donc obtenir les sociétés 43, 27, 12 et 18
    Si je demande la société Clubic (n°27) : je devrais avoir les sociétés 27, 12 et 18

Je n’arrive pas à faire cette requête sans qu’elle ne soit moche.
Suis-je obligé d’avoir une boucle (par récursivité ou par loop) ?

Merci

Tu trouveras sûrement ton bonheur ici :
http://dev.mysql.com/tech-resources/articles/hierarchical-data.html

C’est vrai que j’avais pensé aux nested-tree mais j’aurais aimé voir si y’avait un autre moyen :slight_smile:

Avec SQL server il y a moyen de faire en une seule query (ici sur la db sample adventureworks):

WITH DirectReports(ManagerID, EmployeeID, EmployeeLevel) AS 
(
    SELECT ManagerID, EmployeeID, 0 AS EmployeeLevel
    FROM HumanResources.Employee
    WHERE ManagerID IS NULL
    UNION ALL
    SELECT e.ManagerID, e.EmployeeID, EmployeeLevel + 1
    FROM HumanResources.Employee e
        INNER JOIN DirectReports d
        ON e.ManagerID = d.EmployeeID 
)
SELECT ManagerID, EmployeeID, EmployeeLevel 
FROM DirectReports

Ca ne marche qu’avec SQL 2005 et +