首頁 >資料庫 >mysql教程 >如何在單一 SQL 查詢中檢索特定組織的所有員工記錄?

如何在單一 SQL 查詢中檢索特定組織的所有員工記錄?

Patricia Arquette
Patricia Arquette原創
2024-12-19 09:15:10958瀏覽

How Can I Retrieve All Employee Records for a Specific Organization in a Single SQL Query?

在單一結果集中檢索與組織關聯的多個員工記錄

當前的任務涉及獲取指定組織的所有詳細資訊以及其員工的名字。為了應對這項挑戰,必須考慮一種特定於資料庫供應商的方法,因為 SQL-92 或 SQL-99 中不存在通用解決方案。

對於 MySQL,GROUP_CONCAT 函數允許高效擷取連接值。使用此函數的查詢可能類似於以下內容:

SELECT 
  o.ID, o.Address, o.OtherDetails,
  GROUP_CONCAT( CONCAT(e.firstname, ' ', e.lastname) ) AS Employees
FROM 
  employees e 
JOIN 
  organization o ON o.org_id=e.org_id
GROUP BY 
  o.org_id;

PostgreSQL 9.0 使用STRING_AGG 函數提供了同樣簡單的解決方案:

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

對於9.0 之前的Postgre 版本,CREATE AGGREGATE 指令允許自訂聚合函數定義。

Oracle 使用 LISTAGG 來實現類似的功能,而 MS SQL Server 使用 STRING_AGG。

在沒有內建群組串聯函數的情況下,後備選項涉及建立一個預存程序,該流程接受組織 ID 作為其輸入並傳回串聯的員工姓名。然後可以在查詢中使用此預存程序:

SELECT 
  o.ID, o.Address, o.OtherDetails,
  MY_CUSTOM_GROUP_CONCAT_PROCEDURE( o.ID ) AS Employees
FROM 
  organization o;

透過採用這些特定於供應商的方法,可以在單一結果集中檢索屬於單一組織的多個員工記錄。

以上是如何在單一 SQL 查詢中檢索特定組織的所有員工記錄?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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