Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mendapatkan Kategori dan Leluhurnya Menggunakan Rekursif Self-Join dalam SQL Server?
Menggunakan Rekursif Self-Joins dalam SQL Server untuk Mendapatkan Kategori dan Leluhurnya
Artikel ini menunjukkan cara untuk mendapatkan semula kategori dan kategori nenek moyangnya daripada jadual hierarki dalam SQL Server menggunakan sambung kendiri rekursif. Kami akan menggunakan Common Table Expression (CTE) untuk tugasan ini.
Senario:
Pertimbangkan jadual Categories
dengan lajur Id
, Name
dan ParentId
yang mewakili struktur kategori hierarki. Matlamatnya adalah untuk menulis pertanyaan yang mengembalikan kategori tertentu (cth., "Komputer riba Perniagaan") bersama-sama dengan semua kategori induknya dalam rentetan tunggal yang dipisahkan koma.
Penyelesaian CTE Rekursif:
Penyelesaian menggunakan CTE rekursif untuk melintasi struktur hierarki. Inilah pertanyaannya:
<code class="language-sql">WITH CategoryHierarchy AS ( SELECT id, name, CAST(name AS VARCHAR(MAX)) AS path, parent_id FROM Categories WHERE parent_id IS NULL -- Start with root categories UNION ALL SELECT c.id, c.name, CAST(ch.path + ',' + c.name AS VARCHAR(MAX)), c.parent_id FROM Categories c INNER JOIN CategoryHierarchy ch ON c.parent_id = ch.id )</code>
CTE ini, CategoryHierarchy
, secara rekursif menyertai jadual Categories
kepada dirinya sendiri. Pernyataan awal SELECT
memilih kategori akar (yang mempunyai parent_id
sebagai NULL). UNION ALL
menggabungkan ini dengan pilihan rekursif berikutnya, membina rentetan path
dengan menggabungkan nama kategori ibu bapa dan anak.
Pertanyaan untuk Mendapatkan Kategori dan Nenek Moyang Tertentu:
Untuk mendapatkan semula kategori "Komputer Riba Perniagaan" dan nenek moyangnya:
<code class="language-sql">SELECT id, name, path FROM CategoryHierarchy WHERE name = 'Business Laptops';</code>
Contoh Jadual dan Data:
Mari kita buat contoh Categories
jadual dan masukkan beberapa data:
<code class="language-sql">CREATE TABLE Categories ( Id INT PRIMARY KEY, Name VARCHAR(100), ParentId INT REFERENCES Categories(Id) ); INSERT INTO Categories (Id, Name, ParentId) VALUES (1, 'Electronics', NULL), (2, 'Laptops', 1), (3, 'Desktops', 1), (4, 'Business Laptops', 2), (5, 'Gaming Laptops', 2);</code>
Hasil Jangkaan:
Untuk pertanyaan yang menyasarkan 'Komputer Riba Perniagaan', output yang dijangkakan ialah:
<code>id name path 4 Business Laptops Electronics,Laptops,Business Laptops</code>
Pendekatan ini secara berkesan mendapatkan semula kategori dan keturunan lengkapnya menggunakan CTE rekursif, menyediakan penyelesaian yang jelas dan cekap untuk menavigasi data hierarki dalam SQL Server. Ingat untuk melaraskan panjang VARCHAR(MAX)
jika nama kategori anda mungkin melebihi had ini.
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Kategori dan Leluhurnya Menggunakan Rekursif Self-Join dalam SQL Server?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!