Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Rekursive Abfrage, um den übergeordneten Datensatz zu finden

Versuchen Sie Folgendes:

declare @t table (
 childID int,
 ParentID int,
 level int
)

insert into @t
select 71, 154, 4
union
select 154, 192, 3
union
select 192, 209, 2
union
select 209, 0, 1

Declare @SearchChild int
set @SearchChild=71

  ;with MyCTE as (
      select t1.childID, t1.ParentID , @SearchChild AS searchChild, t1.level
        from @t t1 
        where t1.childID = @SearchChild
      UNION ALL
      select t1.childID, t1.ParentID , c.SearchChild, t1.level
        from @t t1
        inner join MyCTE c on t1.childID=c.ParentID
  )
select top 1 * from MyCTE order by level asc

AUSGABE:

childID     ParentID    searchChild level
----------- ----------- ----------- -----------
209         0           71          1

Ich bin mir nicht sicher, wonach Sie suchen, es gibt keine Reihe, die 209 und 71 zusammen hat? das ist das Beste, was Sie tun können. Außerdem funktioniert dieser CTE in der Kette nach oben und nicht nach unten und sollte auf großen Tabellen viel besser funktionieren.