Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Menggabungkan Data dengan Cekap daripada Perhubungan Satu-ke-Banyak dalam SQL?

Bagaimana untuk Menggabungkan Data dengan Cekap daripada Perhubungan Satu-ke-Banyak dalam SQL?

Susan Sarandon
Lepaskan: 2024-12-29 12:02:12
asal
154 orang telah melayarinya

How to Efficiently Concatenate Data from One-to-Many Relationships in SQL?

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;
Salin selepas log masuk

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;
Salin selepas log masuk

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;
Salin selepas log masuk

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;
Salin selepas log masuk

Penggunaan

SELECT
  o.ID,
  o.Address,
  o.OtherDetails,
  MY_CUSTOM_GROUP_CONCAT_PROCEDURE(o.ID) AS Employees
FROM
  Organization o;
Salin selepas log masuk

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!

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