sql >> Database >  >> RDS >> Sqlserver

Recursieve zoekopdracht om het bovenliggende record te vinden

Probeer dit:

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

UITGANG:

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

Ik weet niet zeker wat je zoekt, er is geen rij die 209 en 71 samen heeft? dit is het beste wat je kunt doen. Deze CTE werkt ook omhoog in de keten en niet naar beneden, en zou veel beter moeten werken op grote tafels.



  1. Oracle:maximale waarde halen uit een groep?

  2. Is er een manier om OrmLite te gebruiken met Postgres hstores?

  3. MySql.Data.MySqlClient.MySqlException:Time-out verlopen

  4. SQL - volgorde op lijstvolgorde