Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menjana Senarai Dipisahkan Koma dengan Cekap daripada Berbilang Jadual SQL?

Bagaimana untuk Menjana Senarai Dipisahkan Koma dengan Cekap daripada Berbilang Jadual SQL?

Barbara Streisand
Barbara Streisandasal
2025-01-18 22:21:11203semak imbas

How to Efficiently Generate Comma-Separated Lists from Multiple SQL Tables?

Sepadukan pertanyaan SQL untuk menjana senarai dipisahkan koma

Dalam SQL, selalunya perlu menjana senarai yang dipisahkan koma daripada data dalam berbilang jadual. Sebagai contoh, katakan anda mempunyai tiga jadual: Applications(id,name), Resources(id,name) dan ApplicationsResources(id,app_id,resource_id), dan anda ingin membuat jadual yang memaparkan semua nama sumber, di mana setiap baris mengandungi senarai aplikasi yang dipisahkan koma yang dikaitkan dengan sumber.

Cara paling mudah ialah melakukan pertanyaan berasingan untuk setiap sumber, tetapi ini tidak cekap. Sebaliknya, kita boleh memanfaatkan teknik SQL yang lebih kompleks untuk mencapai ini dalam satu pertanyaan.

Kaedah:

Pertanyaan SQL berikut menunjukkan cara untuk mencapai ini:

MySQL:

<code class="language-sql">SELECT r.name,
         GROUP_CONCAT(a.name SEPARATOR ',')
    FROM RESOURCES r
    JOIN APPLICATIONSRESOURCES ar ON ar.resource_id = r.id
    JOIN APPLICATIONS a ON a.id = ar.app_id
GROUP BY r.name</code>

SQL Server (2005):

<code class="language-sql">SELECT r.name,
       STUFF((SELECT ',' + a.name
               FROM APPLICATIONS a
               JOIN APPLICATIONRESOURCES ar ON ar.app_id = a.id
              WHERE ar.resource_id = r.id
           GROUP BY a.name
            FOR XML PATH(''), TYPE).value('text()[1]','NVARCHAR(max)'), 1, LEN(','), '')
 FROM RESOURCES r</code>

SQL Server (2017):

<code class="language-sql">SELECT r.name,
         STRING_AGG(a.name, ',')
    FROM RESOURCES r
    JOIN APPLICATIONSRESOURCES ar ON ar.resource_id = r.id
    JOIN APPLICATIONS a ON a.id = ar.app_id
GROUP BY r.name</code>

Oracle:

Dalam Oracle, pengagregatan rentetan dan cantuman dikendalikan secara berbeza. Sila rujuk dokumentasi Oracle untuk teknik pemprosesan rentetan tertentu.

Atas ialah kandungan terperinci Bagaimana untuk Menjana Senarai Dipisahkan Koma dengan Cekap daripada Berbilang Jadual SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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