Rumah > pangkalan data > tutorial mysql > Bagaimanakah Pertanyaan Rekursif MySQL Boleh Mendapatkan Semula Semua Nenek Moyang Nod Anak Diberikan dengan Cekap?

Bagaimanakah Pertanyaan Rekursif MySQL Boleh Mendapatkan Semula Semua Nenek Moyang Nod Anak Diberikan dengan Cekap?

DDD
Lepaskan: 2024-12-07 02:20:13
asal
845 orang telah melayarinya

How Can MySQL Recursive Queries Efficiently Retrieve All Ancestors of a Given Child Node?

Pertanyaan Hierarki dalam MySQL: Mendapatkan Perhubungan Leluhur

Untuk mengurus data hierarki dengan berkesan, MySQL menawarkan pertanyaan rekursif yang berkuasa yang boleh menavigasi perhubungan pada sebarang kedalaman . Ini amat berguna apabila anda perlu mengekstrak perhubungan nenek moyang.

Pertimbangkan struktur perhubungan berikut, dengan 'a' mewakili medan induk dan 'b' mewakili medan anak:

| a  | b  |
-----------
| 1  | 2  |
| 2  | 3  |
| 3  | 4  |
| 4  | 5  |
| 3  | 6  |
| 4  | 7  |
Salin selepas log masuk

Masalah: Memandangkan nilai medan anak (mis., 5), tentukan semua medan induk, datuk nenek dan sebagainya hidup, tanpa mengira kedalaman dalam hierarki.

Penyelesaian:

MySQL menyediakan Ungkapan Jadual Biasa (CTE) rekursif yang membolehkan anda menavigasi perhubungan hierarki dengan cekap:

WITH RECURSIVE Ancestors AS (
    SELECT  *
    FROM    mytable
    WHERE   b = 5
    UNION ALL
    SELECT  t1.*
    FROM    mytable t1
    JOIN    Ancestors t2 ON t1.a = t2.b
)
SELECT  a, b
FROM    Ancestors;
Salin selepas log masuk

Pertanyaan ini mencipta CTE rekursif bernama 'Nenek moyang' yang secara berulang mengenal pasti ibu bapa setiap medan anak dalam hierarki. CTE bermula dengan memilih medan anak dengan nilai 5 (iaitu, 5). Ia kemudiannya menggabungkan 'mytable' kepada dirinya sendiri menggunakan medan 'a' (ibu bapa) dan 'b' (anak). Proses rekursif ini berterusan sehingga tiada lagi medan induk untuk diambil.

Pernyataan SELECT akhir mengekstrak kedua-dua medan 'a' (ibu bapa) dan 'b' (anak) daripada CTE 'Ancestors', memberikan perhubungan hierarki yang diingini.

Apabila dilaksanakan, pertanyaan ini mengembalikan yang berikut keputusan:

a  | b
-----------
1  | 2
2  | 3
3  | 4
4  | 5
Salin selepas log masuk

Oleh itu, ia berjaya mendapatkan semula ibu bapa, datuk dan nenek dan nenek moyang selanjutnya nilai medan anak yang disediakan.

Atas ialah kandungan terperinci Bagaimanakah Pertanyaan Rekursif MySQL Boleh Mendapatkan Semula Semua Nenek Moyang Nod Anak Diberikan 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan