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

Vælg forælder og barn fra samme tabel

Du bør bruge en rekursiv CTE (Common Table Expression) til dette:

-- define the recursive CTE and give it a name
;WITH Hierarchy AS
(
    -- "anchor" - top-level rows to select, here those with ManagerId = 0
    SELECT EmpId, EmpName, NULL AS 'MgrId', CAST(NULL AS NVARCHAR(50)) AS 'MgrName', 1 AS 'Level'
    FROM dbo.Emp
    WHERE ManagerId = 0

    UNION ALL

    -- recursive part - join an employee to its manager via ManagerId -> mgr.EmpId
    SELECT e.EmpId, e.EmpName, mgr.EmpId, mgr.EmpName, mgr.Level + 1 AS 'Level'
    FROM dbo.Emp e
    INNER JOIN Hierarchy mgr ON e.ManagerId = mgr.EmpId
)
SELECT * FROM Hierarchy


  1. Ydeevneovervågning for TimescaleDB

  2. Hvordan man manipulerer TEXT, NTEXT-data fra sql-servertrigger

  3. ORA-01219:database ikke åben:forespørgsler er kun tilladt på faste tabeller/visninger

  4. Hvorfor kan jeg ikke oprette triggere på objekter, der ejes af SYS?