Rumah > pangkalan data > tutorial mysql > Bagaimanakah CTE Rekursif dalam SQL Server Dapat Mendapatkan Kategori dan Laluan Leluhurnya?

Bagaimanakah CTE Rekursif dalam SQL Server Dapat Mendapatkan Kategori dan Laluan Leluhurnya?

Susan Sarandon
Lepaskan: 2025-01-15 11:30:44
asal
556 orang telah melayarinya

How Can Recursive CTEs in SQL Server Retrieve a Category and its Ancestor Path?

Pertanyaan rujukan kendiri menggunakan ungkapan jadual biasa rekursif (CTE) dalam Pelayan SQL

Pengenalan

Dalam pangkalan data hubungan, pertanyaan rujukan sendiri ialah teknik yang berkuasa untuk merentasi perhubungan hierarki dalam satu jadual. SQL Server menyediakan ungkapan jadual biasa (CTE) untuk tujuan ini, membolehkan pertanyaan rekursif yang cekap dan ekspresif.

Soalan

Pertimbangkan jadual "Kategori" yang dipermudahkan dengan lajur ID, Nama dan ParentId. Jadual menyokong hierarki kategori yang tidak tentu, seperti yang ditunjukkan dalam contoh berikut:

1

2

3

4

<code>Id     Name       ParentId

1      Business   NULL

2      Laptops    1

3      Asus       2</code>

Salin selepas log masuk

Matlamatnya ialah untuk membina pertanyaan yang bukan sahaja mendapatkan semula kategori tertentu (mis., "Komputer riba Perniagaan") tetapi juga menyediakan senarai yang dipisahkan koma bagi semua kategori induknya.

Penyelesaian: CTE Rekursif

Untuk menyelesaikan masalah ini, CTE rekursif boleh digunakan. CTE paling luar mentakrifkan titik permulaan rekursi, manakala istilah rekursif mentakrifkan logik hierarki lanjutan:

1

2

3

4

5

6

7

8

9

<code>WITH CTE AS (

    SELECT Id, Name, Name AS Path, ParentId

    FROM Categories

    WHERE ParentId IS NULL

    UNION ALL

    SELECT t.Id, t.Name, cast(cte.Path + ',' + t.Name as varchar(100)), t.ParentId

    FROM Categories t

    INNER JOIN CTE ON t.ParentId = CTE.Id

)</code>

Salin selepas log masuk

Pertanyaan

Untuk mendapatkan semula kategori yang ditentukan dan kategori induknya, kami menggunakan pertanyaan mudah:

1

2

3

<code>SELECT Id, Name, Path

FROM CTE

WHERE Name = 'Business Laptops'</code>

Salin selepas log masuk

Keputusan

Pertanyaan mengembalikan hasil berikut:

1

2

<code>Id     Name       Path

2      Laptops    Business,Laptops</code>

Salin selepas log masuk

Dalam contoh ini, "Business Laptops" ialah anak kepada "Laptop" iaitu anak kepada "Business". Lajur Path menyediakan laluan hierarki lengkap kembali ke kategori akar.

Kesimpulan

CTE rekursif dalam SQL Server menyediakan cara yang elegan dan cekap untuk menavigasi perhubungan hierarki dalam jadual. Dengan memanfaatkan kuasa rekursi, pertanyaan kompleks boleh dibina untuk mengekstrak cerapan berharga daripada struktur data hierarki.

Atas ialah kandungan terperinci Bagaimanakah CTE Rekursif dalam SQL Server Dapat Mendapatkan Kategori dan Laluan Leluhurnya?. 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