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
4 Réponses :
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
Son koool :), une si belle requête, mais je pense que c'est fait pour une hiérarchie de trois niveaux?
Si vous utilisez un CTE récursif, n'oubliez pas d'ajouter sur votre join p> € Vous serez juste un la récursion maximale em> -error puisque elle boucle p> p>
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)