Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Cekap Mendapatkan Berbilang Rekod Berkaitan dalam Pangkalan Data SQL?

Bagaimana untuk Cekap Mendapatkan Berbilang Rekod Berkaitan dalam Pangkalan Data SQL?

Patricia Arquette
Patricia Arquetteasal
2024-12-28 14:28:16691semak imbas

How to Efficiently Retrieve Multiple Related Records in SQL Databases?

Cara Mendapatkan Berbilang Rekod Berkaitan dengan Rekod Tunggal

Dalam pengurusan pangkalan data, selalunya perlu mengambil data daripada berbilang jadual yang dihubungkan melalui perhubungan. Artikel ini menunjukkan kaedah yang cekap untuk mendapatkan semula semua maklumat tentang organisasi tertentu serta nama pertama pekerjanya.

Konsep mendapatkan berbilang rekod berkaitan memerlukan penggunaan penggabungan kumpulan, yang tidak diseragamkan dalam SQL -92 atau SQL-99. Oleh itu, penyelesaian khusus pangkalan data adalah perlu.

MySQL

MySQL menyediakan fungsi GROUP_CONCAT untuk penyatuan kumpulan. Untuk mendapatkan semula data yang dikehendaki, laksanakan pertanyaan berikut:

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 9.0 memperkenalkan STRING_AGG fungsi:

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 menyediakan LISTAGG untuk penyatuan kumpulan:

select 
  o.ID, o.Address, o.OtherDetails,
  LISTAGG(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

MS SQL Server

Sama seperti PostgreSQL, MS SQL Server menggunakan STRING_AGG untuk kumpulan penggabungan:

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

Penyelesaian Sandaran

Untuk versi pangkalan data yang lebih lama atau pangkalan data tidak patuh, kaedah sandaran wujud:

  1. Buat prosedur tersimpan yang mengambil ID organisasi sebagai input dan mengeluarkan pekerja yang digabungkan nama.
  2. Gunakan prosedur tersimpan ini dalam pertanyaan:
select 
  o.ID, o.Address, o.OtherDetails,
  MY_CUSTOM_GROUP_CONCAT_PROCEDURE( o.ID ) as Employees
from 
  organization o

Dengan melaksanakan penyelesaian khusus pangkalan data ini atau menggunakan kaedah sandaran, anda boleh mendapatkan semula maklumat yang diingini dengan cekap dan tepat .

Atas ialah kandungan terperinci Bagaimana untuk Cekap Mendapatkan Berbilang Rekod Berkaitan dalam Pangkalan Data 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