Wenn Sie diese Struktur mit maximal 3 Ebenen verwenden möchten, können Sie die Tabelle dreimal mit sich selbst verbinden:
SELECT
c1.id AS level_1,
c2.id AS level_2,
c3.id AS level_3
FROM categories c1
LEFT JOIN categories c2 ON c1.id = c2.parent_id
LEFT JOIN categories c3 ON c2.id = c3.parent_id
WHERE c1.parent_id IS NULL
Ich gehe davon aus, dass Elternkategorien NULL in parent_id haben.
Ein Beispiel:
DECLARE @categories TABLE
(
id INT,
parent_id INT
)
INSERT INTO @categories(id,parent_id) VALUES(1,NULL)
INSERT INTO @categories(id,parent_id) VALUES(4,1)
INSERT INTO @categories(id,parent_id) VALUES(5,1)
INSERT INTO @categories(id,parent_id) VALUES(6,5)
INSERT INTO @categories(id,parent_id) VALUES(2,NULL)
SELECT * FROM @categories
SELECT c1.id AS level_1, c2.id AS level_2,
c3.id AS level_3
FROM @categories c1
LEFT JOIN @categories c2 ON c1.id = c2.parent_id
LEFT JOIN @categories c3 ON c2.id = c3.parent_id
WHERE c1.parent_id IS NULL
Ergebnisse:
level_1 | level_2 | level_3
---------------------------
1 | 4 | NULL
1 | 5 | 6
2 | NULL | NULL