Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mendapatkan Rekod Berkaitan daripada Jadual Pangkalan Data Berbeza dalam Satu Pertanyaan?

Bagaimana untuk Mendapatkan Rekod Berkaitan daripada Jadual Pangkalan Data Berbeza dalam Satu Pertanyaan?

Patricia Arquette
Lepaskan: 2024-12-22 03:23:14
asal
744 orang telah melayarinya

How to Retrieve Related Records from Different Database Tables in a Single Query?

Mengambil semula Rekod Berkaitan dalam Satu Pertanyaan Tunggal

Dalam bidang pangkalan data hubungan, selalunya perlu menanyakan berbilang rekod daripada jadual berbeza yang berkongsi sebuah perhubungan. Senario biasa ialah mendapatkan semula semua maklumat tentang organisasi tertentu bersama-sama dengan nama pertama semua pekerjanya.

Untuk mencapai matlamat ini, kami boleh memanfaatkan pelbagai teknik khusus pangkalan data, seperti yang diterangkan di bawah:

MySQL dan PostgreSQL:

Menggunakan terbina dalam Fungsi GROUP_CONCAT dalam MySQL atau string_agg() dalam PostgreSQL, kita boleh mengagregatkan semua nama pertama pekerja yang berkaitan dengan organisasi tertentu dan menggabungkannya menjadi satu rentetan:

SELECT
  o.ID,
  o.Address,
  o.OtherDetails,
  GROUP_CONCAT(e.firstname) AS Employees
FROM organization AS o
JOIN employee AS e
  ON o.org_id = e.org_id
GROUP BY
  o.org_id;
Salin selepas log masuk

PostgreSQL 9.0 dan Kemudian:

PostgreSQL 9.0 dan kemudiannya memperkenalkan Fungsi STRING_AGG, yang membolehkan lebih fleksibiliti dalam penggabungan:

SELECT
  o.ID,
  o.Address,
  o.OtherDetails,
  STRING_AGG(e.firstname || ' ' || e.lastname, ', ') AS Employees
FROM organization AS o
JOIN employee AS e
  ON o.org_id = e.org_id
GROUP BY
  o.org_id;
Salin selepas log masuk

Oracle:

Oracle menyediakan fungsi LISTAGG untuk tujuan ini:

SELECT
  o.ID,
  o.Address,
  o.OtherDetails,
  LISTAGG(e.firstname, ', ') AS Employees
FROM organization AS o
JOIN employee AS e
  ON o.org_id = e.org_id
GROUP BY
  o.org_id;
Salin selepas log masuk

MS SQL Server:

MS SQL Server menawarkan fungsi STRING_AGG:

SELECT
  o.ID,
  o.Address,
  o.OtherDetails,
  STRING_AGG(e.firstname, ', ') AS Employees
FROM organization AS o
JOIN employee AS e
  ON o.org_id = e.org_id
GROUP BY
  o.org_id;
Salin selepas log masuk

Penyelesaian Fallback untuk Pangkalan Data Lain:

Jika pangkalan data anda tidak menyokong mana-mana fungsi terbina dalam ini, anda boleh memilih untuk penyelesaian sandaran dengan mencipta prosedur tersimpan yang mengambil ID organisasi sebagai input dan menggabungkan nama pekerja sewajarnya:

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

Dengan menggunakan teknik ini, anda boleh mendapatkan semula berbilang rekod dengan cekap daripada jadual berkaitan dan membentangkannya dalam bentuk yang disatukan, menghapuskan keperluan untuk berbilang pertanyaan atau pemasangan data baris demi baris.

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Rekod Berkaitan daripada Jadual Pangkalan Data Berbeza dalam Satu Pertanyaan?. 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