Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Вземете основен родител на дете в йерархична таблица

DECLARE @id INT = 6
;WITH parent AS
(
    SELECT id, parentId, 1 AS [level] from tbl WHERE id = @id
    UNION ALL 
    SELECT t.id, t.parentId, [level] + 1 FROM parent
    INNER JOIN tbl t ON t.id =  parent.parentid
)
SELECT TOP 1 id FROM parent ORDER BY [level] DESC

Отговорът на @TechDo предполага, че най-ниският идентификатор ще бъде родителят. Ако не искате да разчитате на това, тогава горната заявка ще сортира по дълбочина.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Пропускане на редове при импортиране на Excel в SQL с помощта на SSIS 2008

  2. Използвайте TYPE_ID(), за да получите идентификатора на тип данни в SQL Server

  3. TSQL - Изберете Топ 10 и покажете останалите като „Други“

  4. Каква е разликата между CHAR и VARCHAR в SQL Server - SQL Server / T-SQL урок, част 31

  5. Създайте таблица в SQL Server 2017