sql >> Databáze >  >> RDS >> Sqlserver

Rekurzivní dotaz k nalezení nadřazeného záznamu

Zkuste toto:

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

VÝSTUP:

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

Nejsem si jistý, o co vám jde, neexistuje žádná řada, která by měla dohromady 209 a 71? to je to nejlepší, co můžete udělat. Také tento CTE funguje v řetězci a ne dolů a měl by fungovat mnohem lépe na velkých stolech.



  1. Nejlepší způsob, jak zkontrolovat stávajícího uživatele v databázi mySQL?

  2. Použití poddotazu v Against pro FULLTEXTOVÉ vyhledávání v Mysql

  3. Ukládání data a času jako UTC v PHP/MySQL

  4. Rozsah SQL Integer při vytváření tabulek