Menavigasi struktur data hierarki boleh menjadi rumit. Ungkapan jadual biasa (CTE) rekursif SQL Server menawarkan penyelesaian yang berkuasa untuk melintasi struktur seperti pokok ini menggunakan cantuman sendiri.
Pertimbangkan model data hierarki biasa, seperti jadual kategori:
<code class="language-sql">CREATE TABLE Categories ( Id int PRIMARY KEY, Name nvarchar(MAX), ParentId int FOREIGN KEY REFERENCES Categories(Id) );</code>
Reka bentuk ini membenarkan kategori bersarang kedalaman sewenang-wenangnya. Memvisualisasikan hierarki ini (seperti yang ditunjukkan di bawah) menyerlahkan kesukaran untuk mendapatkan semula keturunan lengkap dengan pertanyaan SQL standard.
[Sisipkan imej hierarki kategori]
CTE rekursif menyelesaikan masalah ini dengan elegan. Pertanyaan berikut menunjukkan cara untuk mendapatkan semula kategori dan keseluruhan keturunannya:
<code class="language-sql">WITH RecursiveCategoryCTE AS ( SELECT c.Id, c.Name, CAST(c.Name AS nvarchar(MAX)) AS Path FROM Categories AS c WHERE c.ParentId IS NULL UNION ALL SELECT t.Id, t.Name, CAST(r.Path + ',' + t.Name AS nvarchar(MAX)) AS Path FROM RecursiveCategoryCTE AS r JOIN Categories AS t ON t.ParentId = r.Id ) SELECT c.Id, c.Name, c.Path FROM RecursiveCategoryCTE AS c WHERE c.Name = 'Business Laptops';</code>
RecursiveCategoryCTE
, bermula dengan memilih kategori akar (di mana ParentId
ialah NULL).Categories
secara rekursif, membina lajur Path
untuk mengumpul nama nenek moyang.SELECT
penapis akhir untuk kategori sasaran ('Komputer riba Perniagaan') dan laluan keturunannya yang dijana.Hasilnya ialah:
Id | Name | Path |
---|---|---|
12 | Business Laptops | Computers,Laptops,Business Laptops |
Teknik ini bernilai dalam banyak aplikasi, termasuk:
Pendekatan ini menyediakan kaedah ringkas dan cekap untuk menavigasi data hierarki dalam SQL Server.
Atas ialah kandungan terperinci Bagaimanakah Penyertaan Diri Rekursif dalam Pelayan SQL Dapat Mendapatkan Data Hierarki dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!