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

Bagaimanakah Penyertaan Diri Rekursif dalam Pelayan SQL Mengemudi Data Hierarki dengan Cekap?

Patricia Arquette
Lepaskan: 2025-01-17 15:31:11
asal
110 orang telah melayarinya

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

Sertai Kendiri Rekursif dalam Pelayan SQL

Dalam Pelayan SQL, sambung kendiri rekursif membolehkan anda menavigasi struktur data hierarki dengan menyertai jadual kepada dirinya sendiri beberapa kali berdasarkan perhubungan ibu bapa-anak.

Untuk melakukan penyambungan diri rekursif ke mendapatkan semula rekod yang berkaitan dengan hierarki tertentu, strategi berikut boleh digunakan:

Menggunakan Ungkapan Jadual Biasa (CTE)

CTE, juga dikenali sebagai pertanyaan rekursif , boleh digunakan untuk melaksanakan sambung diri rekursif. Idea teras adalah untuk mentakrifkan pertanyaan utama yang memilih rekod yang memenuhi kriteria tertentu (mis., tiada ibu bapa) dan kemudian menggunakan subkueri rekursif untuk menambahkan rekod anak pada hasil:

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

Dengan menambahkan pesanan syarat kepada subkueri rekursif, susunan pokok boleh dipelihara:

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

Pertimbangan:

  • Pertanyaan sauh harus memilih rekod yang mewakili punca hierarki yang ingin anda lalui.
  • Subkueri rekursif harus bergabung dengan rekod anak dengan rekod induk menggunakan hubungan ibu bapa-anak yang sesuai lajur.
  • Anda boleh menambah lajur tambahan pada subkueri rekursif untuk menjejaki tahap atau maklumat laluan jika perlu.

Atas ialah kandungan terperinci Bagaimanakah Penyertaan Diri Rekursif dalam Pelayan SQL Mengemudi Data Hierarki dengan Cekap?. 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