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

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

Barbara Streisand
Lepaskan: 2025-01-15 12:01:47
asal
222 orang telah melayarinya

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

Mengambil Data Hierarki dengan Cekap dengan Sambungan Sendiri Rekursif dalam Pelayan SQL

Menavigasi struktur data hierarki boleh menjadi rumit. Ungkapan jadual biasa (CTE) rekursif SQL Server menawarkan penyelesaian yang berkuasa untuk melintasi struktur seperti pokok ini menggunakan cantuman sendiri.

Memahami Cabaran

Pertimbangkan model data hierarki biasa, seperti jadual kategori:

<code class="language-sql">CREATE TABLE Categories (
  Id int PRIMARY KEY,
  Name nvarchar(MAX),
  ParentId int FOREIGN KEY REFERENCES Categories(Id)
);</code>
Salin selepas log masuk

Reka bentuk ini membenarkan kategori bersarang kedalaman sewenang-wenangnya. Memvisualisasikan hierarki ini (seperti yang ditunjukkan di bawah) menyerlahkan kesukaran untuk mendapatkan semula keturunan lengkap dengan pertanyaan SQL standard.

[Sisipkan imej hierarki kategori]

Penyelesaian CTE Rekursif

CTE rekursif menyelesaikan masalah ini dengan elegan. Pertanyaan berikut menunjukkan cara untuk mendapatkan semula kategori dan keseluruhan keturunannya:

<code class="language-sql">WITH RecursiveCategoryCTE AS (
  SELECT
    c.Id,
    c.Name,
    CAST(c.Name AS nvarchar(MAX)) AS Path
  FROM Categories AS c
  WHERE
    c.ParentId IS NULL
  UNION ALL
  SELECT
    t.Id,
    t.Name,
    CAST(r.Path + ',' + t.Name AS nvarchar(MAX)) AS Path
  FROM RecursiveCategoryCTE AS r
  JOIN Categories AS t
    ON t.ParentId = r.Id
)
SELECT
  c.Id,
  c.Name,
  c.Path
FROM RecursiveCategoryCTE AS c
WHERE
  c.Name = 'Business Laptops';</code>
Salin selepas log masuk

Pecahan Pertanyaan

  • CTE, RecursiveCategoryCTE, bermula dengan memilih kategori akar (di mana ParentId ialah NULL).
  • Ia bergabung kembali ke jadual Categories secara rekursif, membina lajur Path untuk mengumpul nama nenek moyang.
  • Penyataan SELECT penapis akhir untuk kategori sasaran ('Komputer riba Perniagaan') dan laluan keturunannya yang dijana.

Hasilnya ialah:

Id Name Path
12 Business Laptops Computers,Laptops,Business Laptops

Aplikasi Dunia Sebenar

Teknik ini bernilai dalam banyak aplikasi, termasuk:

  • Carta organisasi
  • Navigasi tapak e-dagang (jejak serbuk roti)
  • Pangkalan data genealogi (pokok keluarga)

Pendekatan ini menyediakan kaedah ringkas dan cekap untuk menavigasi data hierarki dalam SQL Server.

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