sql >> Database teknologi >  >> RDS >> Sqlserver

Rekursiv forespørgsel for at finde den overordnede post

Prøv dette:

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

OUTPUT:

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

Jeg er ikke sikker på, hvad du leder efter, er der ingen række, der har 209 og 71 sammen? dette er det bedste du kan gøre. Denne CTE arbejder også op i kæden og ikke ned, og burde fungere meget bedre på store borde.



  1. java-kode til import af xls-data til mysql-databasen

  2. Er der en måde at bruge ON DUPLICATE KEY til at opdatere alt det, jeg ville indsætte?

  3. Bedste måde at lave multi-row insert i Oracle?

  4. Hvilken procentdel af brugerne deltog på hver dag (SQL-forespørgsel)