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

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

Linda Hamilton
發布: 2024-12-29 19:18:11
原創
596 人瀏覽過

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

根據關係檢索多筆記錄

在處理有關係的資料庫表時,一個常見的任務是根據關係從多個表中檢索資訊特定的關係。例如,考慮兩個表格:組織和員工,其中一個組織可以有多個員工。目標是在單一記錄集中檢索有關特定組織的所有信息,包括其所有員工的名字。

資料庫特定解決方案

此任務的適當方法因所使用的資料庫系統而異。一些流行的資料庫系統提供了可以促進群組串聯的特定函數或特性,即將多個值組合成單一字串的過程:

  • MySQL: 使用 GROUP_CONCAT函數來串聯基於組織的員工的名字ID.
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 提供了用於群組連接的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 提供 LISTAGG 函數用於連線值。
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:MS SQL Server 2017 和後來引入了用於群組連接的 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
登入後複製

後備解決方案

在缺乏本機組連接函數或支援舊版的資料庫系統中資料庫,可以採用後備解決方案:

  • 建立一個接受的儲存過程組織的ID 並傳回串聯的員工姓名。將此預存程序整合到查詢中。
select 
  o.ID, o.Address, o.OtherDetails,
  MY_CUSTOM_GROUP_CONCAT_PROCEDURE( o.ID ) as Employees
from 
  organization o
登入後複製

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板