在單一結果集中檢索與組織關聯的多個員工記錄
當前的任務涉及獲取指定組織的所有詳細資訊以及其員工的名字。為了應對這項挑戰,必須考慮一種特定於資料庫供應商的方法,因為 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中文網其他相關文章!