Rumah >pangkalan data >tutorial mysql >Bagaimanakah Penyertaan Diri Rekursif dalam Pelayan SQL Mendapatkan Data Hierarki?

Bagaimanakah Penyertaan Diri Rekursif dalam Pelayan SQL Mendapatkan Data Hierarki?

Patricia Arquette
Patricia Arquetteasal
2025-01-15 12:15:47594semak imbas

How Can Recursive Self-Joins in SQL Server Retrieve Hierarchical Data?

SQL Server Recursive Self-Joins: Menavigasi Data Hierarki

Sambungan diri rekursif SQL Server menawarkan kaedah yang berkuasa untuk merentasi struktur data hierarki. Ini amat berharga apabila berurusan dengan hubungan ibu bapa-anak dalam satu jadual.

Pertimbangkan jadual Categories dengan lajur ini:

  • Id
  • Name
  • ParentId

Penyertaan diri secara rekursif membolehkan kami mengekstrak perhubungan hierarki dalam jadual ini, merangkumi peringkat kategori bersarang.

Contoh Ilustrasi:

Bayangkan hierarki kategori ini:

<code>- Business Laptops
    - Gaming Laptops
        - Ultrabooks
            - Compact Ultrabooks</code>

Untuk mendapatkan semula "Komputer Riba Perniagaan" dan kategori induknya menggunakan ungkapan jadual biasa rekursif (CTE), kami boleh menggunakan pertanyaan ini:

<code class="language-sql">;WITH CTE AS (
    SELECT id, name, name AS path, parent_id
    FROM Categories
    WHERE parent_id IS NULL
    UNION ALL
    SELECT t.id, t.name, CAST(cte.path + ',' + t.name AS VARCHAR(100)), t.parent_id
    FROM Categories t
    INNER JOIN CTE ON t.parent_id = CTE.id
)
SELECT id, name, path
FROM CTE
WHERE name = 'Business Laptops';</code>

Keluaran pertanyaan ini ialah:

<code>id      name                path
1       Business Laptops      Business Laptops</code>

Penyertaan diri rekursif menyediakan cara yang cekap untuk mengurus dan mendapatkan semula data daripada struktur hierarki yang kompleks, mengakses maklumat berkaitan merentas berbilang peringkat.

Atas ialah kandungan terperinci Bagaimanakah Penyertaan Diri Rekursif dalam Pelayan SQL Mendapatkan 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