Menguasai Gabungan Kumpulan untuk Perhubungan Satu-dengan-Banyak dalam SQL
Dalam pangkalan data hubungan, selalunya perlu mendapatkan maklumat daripada jadual yang mempunyai hubungan satu-dengan-banyak. Senario biasa ialah mengumpulkan data tentang rekod induk dan rekod anak yang berkaitan.
Pertimbangkan contoh jadual Organisasi dan jadual Pekerja, di mana setiap organisasi boleh mempunyai berbilang pekerja. Untuk mendapatkan semula semua maklumat tentang organisasi tertentu, bersama-sama dengan nama pertama semua pekerjanya, kami meneroka pendekatan yang berbeza.
Teknik SQL Standard
Malangnya, SQL standard- 92 dan SQL-99 tidak termasuk fungsi terbina dalam untuk penyatuan kumpulan. Penyelesaian khusus vendor diperlukan.
MySQL
MySQL menawarkan fungsi GROUP_CONCAT:
SELECT o.ID, o.Address, o.OtherDetails, GROUP_CONCAT(CONCAT(e.FirstName, ' ', e.LastName)) AS Employees FROM Employees e INNER JOIN Organization o ON o.Org_ID = e.Org_ID GROUP BY o.Org_ID;
PostgreSQL
PostgreSQL versi 9.0 dan kemudian menyediakan fungsi STRING_AGG:
SELECT o.ID, o.Address, o.OtherDetails, STRING_AGG((e.FirstName || ' ' || e.LastName), ', ') AS Employees FROM Employees e INNER JOIN Organization o ON o.Org_ID = e.Org_ID GROUP BY o.Org_ID;
Oracle
Oracle menggunakan fungsi LISTAGG:
SELECT o.ID, o.Address, o.OtherDetails, LISTAGG(e.FirstName || ' ' || e.LastName, ', ') WITHIN GROUP (ORDER BY e.FirstName) AS Employees FROM Employees e INNER JOIN Organization o ON o.Org_ID = e.Org_ID GROUP BY o.Org_ID;
Fallback Solution
Jika fungsi khusus vendor adalah tidak tersedia, prosedur tersimpan boleh dibuat untuk melaksanakan penggabungan.
Contoh Prosedur Tersimpan (Generik)
CREATE PROCEDURE MY_CUSTOM_GROUP_CONCAT_PROCEDURE ( @Org_ID INT ) AS BEGIN DECLARE @Employees NVARCHAR(MAX) = ''; SELECT @Employees = @Employees + FirstName + ' ' + LastName + ', ' FROM Employees WHERE Org_ID = @Org_ID; SELECT @Employees = LEFT(@Employees, LEN(@Employees) - 2); RETURN @Employees; END GO;
Penggunaan
SELECT o.ID, o.Address, o.OtherDetails, MY_CUSTOM_GROUP_CONCAT_PROCEDURE(o.ID) AS Employees FROM Organization o;
Dengan memanfaatkan teknik ini, pembangun boleh mendapatkan semula maklumat berbilang rekod yang dikaitkan dengan satu rekod, memberikan pandangan holistik data dalam perhubungan satu-ke-banyak.
Atas ialah kandungan terperinci Bagaimana untuk Menggabungkan Data dengan Cekap daripada Perhubungan Satu-ke-Banyak dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!