Rumah >pangkalan data >tutorial mysql >Bagaimana Menggunakan Rekursif Self-Join dalam SQL Server untuk Memaparkan Leluhur Data Hierarki?

Bagaimana Menggunakan Rekursif Self-Join dalam SQL Server untuk Memaparkan Leluhur Data Hierarki?

Barbara Streisand
Barbara Streisandasal
2025-01-15 11:15:44531semak imbas

How to Use Recursive Self-Join in SQL Server to Display Hierarchical Data Ancestors?

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:

  • Kes asas: Bahagian pertama CTE memilih kategori yang tidak mempunyai induk (iaitu nod akar) dan memulakan "Laluan"nya dengan namanya.
  • Kes rekursif: Bahagian kedua secara rekursif menyertai kategori kepada ibu bapa mereka dan menambahkan nama mereka pada lajur "Laluan". Proses ini akan diteruskan sehingga tiada lagi kategori yang belum diproses.
  • Keputusan: CTE menjana jujukan baris, setiap satu mewakili kategori dan nenek moyangnya yang lengkap. Dengan memilih nama kategori yang diperlukan daripada CTE ini, kami boleh mendapatkan semula data yang diperlukan.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn