Petua menggunakan sambung kendiri rekursif untuk mewakili data hierarki dalam Pelayan SQL
Andaikan anda mempunyai jadual yang dipanggil "Kategori" dengan Id lajur, Nama dan Id Ibu Bapa, membenarkan penciptaan hierarki tanpa had dalam kategori. Untuk memaparkan kategori Komputer Riba Perniagaan dan semua kategori nenek moyangnya, anda boleh memanfaatkan kuasa ungkapan jadual biasa rekursif (CTE).
Mari kita buat contoh jadual "Kategori" dan isikannya dengan data untuk menggambarkan penyelesaiannya:
<code class="language-sql">DECLARE @Categories AS TABLE ( Id INT, Name VARCHAR(100), ParentId INT ); INSERT INTO @Categories VALUES (1, 'A', NULL), (2, 'A.1', 1), (3, 'A.2', 1), (4, 'A.1.1', 2), (5, 'B', NULL), (6, 'B.1', 5), (7, 'B.1.1', 6), (8, 'B.2', 5), (9, 'A.1.1.1', 4), (10, 'A.1.1.2', 4);</code>
Seterusnya, kami mencipta CTE rekursif yang dipanggil "PathFinder" untuk mengulangi hubungan ibu bapa-anak dan menggabungkan nama nenek moyang ke lajur "Path":
<code class="language-sql">WITH PathFinder AS ( SELECT Id, Name, Name AS Path, ParentId FROM @Categories WHERE ParentId IS NULL UNION ALL SELECT t.Id, t.Name, CAST(cf.Path + ', ' + t.Name AS VARCHAR(100)), t.ParentId FROM @Categories t INNER JOIN PathFinder cf ON t.ParentId = cf.Id )</code>
Akhir sekali, kami boleh menggunakan PathFinder CTE untuk mendapatkan semula nama kategori "Komputer Riba Perniagaan" dan nenek moyangnya:
<code class="language-sql">SELECT Name, Path FROM PathFinder WHERE Name = 'Business Laptops';</code>
Pertanyaan ini akan mengembalikan nama kategori dan nenek moyangnya yang dipisahkan dengan koma.
Berikut ialah pecahan pertanyaan rekursif:
Menggunakan pendekatan rekursif ini, anda boleh mewakili dan membuat pertanyaan data hierarki dengan cekap dalam SQL Server, yang menyediakan teknik yang berharga untuk mengurus dan menganalisis data dengan perhubungan yang wujud.
Atas ialah kandungan terperinci Bagaimana Menggunakan Rekursif Self-Join dalam SQL Server untuk Memaparkan Leluhur Data Hierarki?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!