Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mendapatkan Kategori dan Leluhurnya Menggunakan Rekursif Self-Join dalam SQL Server?

Bagaimana untuk Mendapatkan Kategori dan Leluhurnya Menggunakan Rekursif Self-Join dalam SQL Server?

DDD
Lepaskan: 2025-01-15 11:44:44
asal
399 orang telah melayarinya

How to Retrieve a Category and Its Ancestors Using Recursive Self-Join in 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>
Salin selepas log masuk

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

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

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

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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan