sql >> Databasteknik >  >> RDS >> Sqlserver

Få alla barn till en förälder med hjälp av MSSQL-fråga

Förutsatt att du vill skaffa syskon av värdet @p0 , kan du använda en enkel självanslutning:

SELECT p.Child
FROM Table1 c
INNER JOIN Table1 p ON c.Parent = p.Parent
WHERE c.Child = @p0
AND p.Child <> @p0

Inte-lika klausulen här ser till att du får syskon som inte inkluderar värdet du sökte efter. Ta bort den vid behov.

SQL Fiddle-exempel

Eftersom du nämner rekursion kanske du vill ha hela trädet börjar med föräldern för värdet @p0 . I så fall kan du använda en rekursiv CTE:

WITH parent AS (
    SELECT Parent
    FROM Table1
    WHERE Child = @p0
), tree AS (
    SELECT x.Parent, x.Child
    FROM Table1 x
    INNER JOIN parent ON x.Parent = parent.Parent
    UNION ALL
    SELECT y.Parent, y.Child
    FROM Table1 y
    INNER JOIN tree t ON y.Parent = t.Child
)
SELECT Parent, Child
FROM tree

SQL Fiddle-exempel användning av dina data ochmed ytterligare data för att demonstrera den rekursiva CTE



  1. Trunkera tabell i Oracle får fel

  2. Visa pdf-fil lagrad på lokal disk med i Oracle Forms 6i

  3. Fel värde returnerade från mysql float

  4. Kan jag få Google Drive-kalkylblad att fungera som en MySQL-databas?