Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Melakukan Gabungan Sendiri Rekursif dalam Pelayan SQL untuk Meneroka Data Hierarki?

Bagaimanakah Saya Boleh Melakukan Gabungan Sendiri Rekursif dalam Pelayan SQL untuk Meneroka Data Hierarki?

Linda Hamilton
Lepaskan: 2025-01-17 15:37:08
asal
421 orang telah melayarinya

How Can I Perform Recursive Self-Joins in SQL Server to Explore Hierarchical Data?

Menguasai Gabungan Kendiri Rekursif dalam Pelayan SQL untuk Data Hierarki

Sambungan diri rekursif adalah penting untuk menavigasi struktur data hierarki dalam jadual SQL Server. Teknik ini amat berguna apabila berurusan dengan data yang diatur dalam perhubungan ibu bapa-anak, seperti carta organisasi atau salasilah keluarga.

Pendekatan mudah untuk sambung diri rekursif menggunakan ungkapan jadual biasa (CTE):

<code class="language-sql">WITH q AS (
    SELECT *
    FROM mytable
    WHERE ParentID IS NULL
    UNION ALL
    SELECT m.*
    FROM mytable m
    JOIN q ON m.parentID = q.PersonID
)
SELECT *
FROM q;</code>
Salin selepas log masuk

Pertanyaan ini mentakrifkan CTE rekursif, q. Pernyataan awal SELECT mengenal pasti nod akar (yang mempunyai ParentID sebagai NULL). UNION ALL menggabungkan ini dengan pernyataan SELECT berikutnya yang secara rekursif menyertai CTE dengan mytable untuk memasukkan semua keturunan. Penyata SELECT akhir mendapatkan semula set data hierarki lengkap.

Mengekalkan Susunan Hierarki

Untuk mengekalkan struktur dan susunan hierarki asal, pertanyaan yang diubah suai diperlukan:

<code class="language-sql">WITH q AS (
    SELECT m.*, CAST(ROW_NUMBER() OVER (ORDER BY m.PersonId) AS VARCHAR(MAX)) COLLATE Latin1_General_BIN AS bc
    FROM mytable m
    WHERE ParentID IS NULL
    UNION ALL
    SELECT m.*, q.bc + '.' + CAST(ROW_NUMBER() OVER (PARTITION BY m.ParentID ORDER BY m.PersonID) AS VARCHAR(MAX)) COLLATE Latin1_General_BIN
    FROM mytable m
    JOIN q ON m.parentID = q.PersonID
)
SELECT *
FROM q
ORDER BY bc;</code>
Salin selepas log masuk

Pertanyaan dipertingkat ini menambah lajur bc menggunakan ROW_NUMBER() untuk menetapkan pengecam unik, mengekalkan susunan dalam setiap peringkat hierarki. Klausa ORDER BY bc memastikan hasil akhir mencerminkan struktur pokok asal. Melaraskan klausa ORDER BY dalam fungsi ROW_NUMBER() membolehkan penyesuaian susunan nod adik beradik.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melakukan Gabungan Sendiri Rekursif dalam Pelayan SQL untuk Meneroka 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