8
votes

Query SQL pour chaîne parent-enfant

J'ai une seule table pouvant se référer à un autre membre de la table en tant que parent. Ce parent pourrait également faire référence à une autre rangée comme parent ... et ainsi de suite.

id     col1     col2    parentID
1      foo      bar       NULL
2      blah     boo       1
3      fob      far       2
4      wob      lob       NULL


0 commentaires

4 Réponses :


1
votes

Ici vous allez

SELECT P.cat_id AS parent_cat_id, P.parent_id AS ROOT, P.cat_name AS parent_cat_name, C.parent_id, C.cat_id, C.cat_name FROM categories AS P LEFT OUTER JOIN categories AS C ON C.parent_id=P.cat_id WHERE P.parent_id IS NULL ORDER BY parent_cat_name, cat_name


1 commentaires

Son koool :), une si belle requête, mais je pense que c'est fait pour une hiérarchie de trois niveaux?



14
votes

Utilisez un CTE récursive : xxx

résultats: < / p> xxx


0 commentaires

1
votes

Si vous utilisez un CTE récursif, n'oubliez pas d'ajouter xxx

sur votre join xxx

€ Vous serez juste un la récursion maximale -error puisque elle boucle


0 commentaires

-1
votes
WITH Hierarchy(ChildId, ChildName, Generation, ParentId)
AS
(
    SELECT Id, Name, 0, ParentId
        FROM UserType AS FirtGeneration
        WHERE ParentId IS NULL        
    UNION ALL
    SELECT NextGeneration.Id, NextGeneration.Name, Parent.Generation + 1, Parent.ChildId

        FROM UserType AS NextGeneration
        INNER JOIN Hierarchy AS Parent ON NextGeneration.ParentId = Parent.ChildId    
)
SELECT *
    FROM Hierarchy
    OPTION(MAXRECURSION 32767)

0 commentaires