/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
Nested Loop
Fra : Snedker


Dato : 09-02-09 03:10

Hej folkens,

Jeg har følgende udfordring, som jeg godt kunne bruge lidt hjælp til:

http://dl.getdropbox.com/u/175230/tree.jpg kan ses en træstruktur.
Hver gruppe på træet har et GroupID. Jeg skal have alle undergrupper i
hele træet under "Alle varer", som i eksemplet herunder er GROUP12.

Tabel med 2 kolonner:

- GroupID
- ParentID

SELECT * FROM dbo.EcomGroupRelations WHERE ParentID='GROUP12'

Giver fx. 2 poster:

GROUP1,GROUP12
GROUP2,GROUP12

Nu skal jeg traversere resultatet, så jeg også får alle undergrupper:

SELECT * FROM dbo.EcomGroupRelations WHERE ParentID='GROUP1'
+
SELECT * FROM dbo.EcomGroupRelations WHERE ParentID='GROUP2'

Resultatet kunne fx være
GROUP3,GROUP1
GROUP4.GROUP1
+
GROUP5,GROUP2
GROUP6,GROUP2


Hvordan strikkes denne stored procedure bedst mulig sammen? Et link
til noget lignende vil også være multo bien!

På forhånd tak for hjælpen!

mvh /Snedker

 
 
Arne Vajhøj (10-02-2009)
Kommentar
Fra : Arne Vajhøj


Dato : 10-02-09 00:38

Snedker wrote:
> Jeg har følgende udfordring, som jeg godt kunne bruge lidt hjælp til:
>
> På http://dl.getdropbox.com/u/175230/tree.jpg kan ses en træstruktur.
> Hver gruppe på træet har et GroupID. Jeg skal have alle undergrupper i
> hele træet under "Alle varer", som i eksemplet herunder er GROUP12.
>
> Tabel med 2 kolonner:
>
> - GroupID
> - ParentID
>
> SELECT * FROM dbo.EcomGroupRelations WHERE ParentID='GROUP12'
>
> Giver fx. 2 poster:
>
> GROUP1,GROUP12
> GROUP2,GROUP12
>
> Nu skal jeg traversere resultatet, så jeg også får alle undergrupper:
>
> SELECT * FROM dbo.EcomGroupRelations WHERE ParentID='GROUP1'
> +
> SELECT * FROM dbo.EcomGroupRelations WHERE ParentID='GROUP2'
>
> Resultatet kunne fx være
> GROUP3,GROUP1
> GROUP4.GROUP1
> +
> GROUP5,GROUP2
> GROUP6,GROUP2
>
> Hvordan strikkes denne stored procedure bedst mulig sammen? Et link
> til noget lignende vil også være multo bien!

Hvis du ved at der altid er 2 niveauer så er det en simpel
self join.

SELECT egr2.id,egr2.parentid
FROM ecomgrouprelations egr1,ecomgrouprelations egr2
WHERE egr1.parentid='GROUP12' AND egr2.parentid=egr1.id

Arne

Snedker (10-02-2009)
Kommentar
Fra : Snedker


Dato : 10-02-09 12:37

Blev introduceret til WITH-udtrykket, som var lige hvad jeg skulle
bruge.

WITH blev introduceret i MS-SQL 2005:

WITH Hierarchy
AS
(SELECT GroupId, ParentId
FROM dbo.EcomGroupRelations
WHERE ParentId = 'GROUP12'
UNION ALL
SELECT E.GroupId, E.ParentId
FROM dbo.EcomGroupRelations AS E
JOIN Hierarchy AS H
ON H.GroupID = E.ParentID)
SELECT GroupId, ParentId
FROM Hierarchy;

Snedker (10-02-2009)
Kommentar
Fra : Snedker


Dato : 10-02-09 12:40

On 10 Feb., 00:38, Arne Vajhøj <a...@vajhoej.dk> wrote:

> Hvis du ved at der altid er 2 niveauer så er det en simpel
> self join.

Hej Arne,

Som mit indlæg lægger op til, så er det jo ikke lige tilfældet. Men
tak for indsparket alligevel!

Se i øvrigt løsningen på min udfordring, i forlængelse af denne tråd.

Mvh /Snedker


Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste