The PIT
Röster från ITM-koncernen.

Hierarki av poster med SQL

September 25, 2008 09:54 by Christoffer Munkestam

Jag har en tabell där alla poster ska ligga i en hierarki under varandra. Tabellen innehåller alltså ett id- och parentid-fält. Det är inte helt ovanligt att man i sådana lägen kommer på att man vill ha hela hierarkin ovanför posten som man är på, i det här fallet för att visa var man är på en site.

Lite exempeldata i tabellen:
id | parentid
1 | Null
2 | 1
3 | 2
4 | 2
5 | 3
6 | 5

Om vi exempelvis har plockat fram posten med id 6, så vill vi ha ut en lista på hur hierarkin ser ut uppåt tills det inte finns någon relaterad längre. I det här fallet så är det alltså enbart posten med id 4 som inte ska finnas med i vårat urval, men vår SQL ska självklart fungera i alla lägen. Min lösning förutsätter MsSQL 2005 eller MsSQL 2008 eftersom begreppet "With" inte finns i exempelvis MsSQL 2000.

WITH Merged (id, parentid) AS (
	SELECT id, parentid FROM t1 WHERE id = @id
	UNION ALL
	SELECT t1.id, t1.parentid 
	FROM t1 INNER JOIN Merged ON t1.id = Merged.parentid
)
SELECT * FROM Merged

 
(Tack till Tant102 @ Aspsidan.se för hjälpen med att lösa problemet)


Tags:
Categories:
Actions: E-mail | Permalink | Comments (0) | Comment RSSRSS comment feed