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
Lepaskan: 2025-01-15 11:15:44
asal
532 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan