在單一查詢中檢索相關記錄
在關聯式資料庫領域,經常需要從共享的不同表中查詢多筆記錄一種關係。常見的場景是檢索有關特定組織的所有資訊及其所有員工的名字。
為了實現此目的,我們可以利用各種特定於資料庫的技術,如下所述:
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中文網其他相關文章!