Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Pilih orang tua dan anak dari tabel yang sama

Anda harus menggunakan CTE (Common Table Expression) rekursif untuk ini:

-- 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Skrip SQL untuk mengubah SEMUA Kunci Asing untuk ditambahkan ON DELETE CASCADE

  2. Jatuhkan DB tapi jangan hapus *.mdf / *.ldf

  3. Tingkat penyarangan pemicu terlampaui?

  4. Kirim SMS menggunakan pemicu dan prosedur tersimpan dari SQL Server 2008

  5. Pesan berdasarkan tahun, bulan bersama dengan jumlah kumulatif