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

Bagaimana cara mendesain kueri rekursif SQL?

Lihat:

Pembaruan:

CTE rekursif yang tepat pada dasarnya terdiri dari tiga hal:

  • sebuah jangkar SELECT memulai dengan; yang dapat memilih mis. karyawan tingkat akar (di mana Reports_To adalah NULL), atau dapat memilih karyawan sewenang-wenang yang Anda tetapkan, mis. dengan parameter

  • sebuah UNION ALL

  • sebuah rekursif SELECT pernyataan yang memilih dari tabel referensi diri yang sama dan biasanya bergabung dengan CTE rekursif yang sedang dibangun

Ini memberi Anda kemampuan untuk secara rekursif membangun kumpulan hasil yang kemudian dapat Anda pilih.

Jika Anda melihat Northwind contoh database, memiliki tabel yang disebut Employees yang mengacu pada diri sendiri:Employees.ReportsTo --> Employees.EmployeeID mendefinisikan siapa melapor kepada siapa.

CTE Anda akan terlihat seperti ini:

;WITH RecursiveCTE AS
(
    -- anchor query; get the CEO
    SELECT EmployeeID, FirstName, LastName, Title, 1 AS 'Level', ReportsTo
    FROM dbo.Employees
    WHERE ReportsTo IS NULL

    UNION ALL

    -- recursive part; select next Employees that have ReportsTo -> cte.EmployeeID      
    SELECT 
       e.EmployeeID, e.FirstName, e.LastName, e.Title, 
       cte.Level + 1 AS 'Level', e.ReportsTo
    FROM 
       dbo.Employees e
    INNER JOIN 
       RecursiveCTE cte ON e.ReportsTo = cte.EmployeeID
)
SELECT *
FROM RecursiveCTE
ORDER BY Level, LastName    

Saya tidak tahu apakah Anda dapat menerjemahkan sampel Anda ke CTE rekursif yang tepat - tetapi pada dasarnya itulah intinya:kueri jangkar, UNION ALL, kueri rekursif




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. cara mendapatkan nama skema tabel

  2. Tidak dapat menulis data ke transport. Vs2017 ASP.net core Scaffolding (MSSQL WINDOW 10)

  3. Periksa apakah ada baris, jika tidak masukkan

  4. Mengapa membandingkan variabel tanggal SQL dengan nol berperilaku seperti ini?

  5. Bisakah fungsi T-SQL mengembalikan tipe tabel yang ditentukan pengguna?