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!