首頁 >資料庫 >mysql教程 >如何在單一查詢中從不同資料庫表中檢索相關記錄?

如何在單一查詢中從不同資料庫表中檢索相關記錄?

Patricia Arquette
Patricia Arquette原創
2024-12-22 03:23:14720瀏覽

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

在單一查詢中檢索相關記錄

在關聯式資料庫領域,經常需要從共享的不同表中查詢多筆記錄一種關係。常見的場景是檢索有關特定組織的所有資訊及其所有員工的名字。

為了實現此目的,我們可以利用各種特定於資料庫的技術,如下所述:

MySQL 和PostgreSQL:

利用MySQL 和PostgreSQL:

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;

利用MySQL內建的GROUP_CONCAT 函數或string_agg() PostgreSQL,我們可以聚合所有與給定組織相關的員工的名字,並將它們組合成一個字串:

PostgreSQL 9.0 及更高版本

:
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;

PostgreSQL 9.0 及更高版本引入了STRING_AGG函數,該函數允許更靈活地連接:

Oracle:

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;

Oracle 為此提供了LISTAGG 函數:

MS SQL Server:
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;

MS SQL Server 提供STRING_AGG function:

其他資料庫的後備解決方案:
SELECT
  o.ID,
  o.Address,
  o.OtherDetails,
  MY_CUSTOM_GROUP_CONCAT_PROCEDURE(o.ID) AS Employees
FROM organization AS o;

如果您的資料庫不支援任何這些內建函數,您可以選擇後備解決函數方案透過建立一個儲存過程,將組織ID作為輸入並相應地連接員工姓名:By利用這些技術,您可以有效地從相關表中檢索多個記錄並將它們以合併的形式呈現,從而消除了多次查詢或逐行資料組裝的需要。

以上是如何在單一查詢中從不同資料庫表中檢索相關記錄?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn