単一レコードに関連する複数のレコードを取得する方法
データベース管理では、多くの場合、複数のテーブルからデータをフェッチする必要があります。関係を通じてつながっています。この記事では、特定の組織に関するすべての情報とその従業員の名を取得する効率的な方法を説明します。
複数の関連レコードを取得するという概念には、SQL では標準化されていないグループ連結を使用する必要があります。 -92 または SQL-99。したがって、データベース固有のソリューションが必要です。
MySQL
MySQL は、グループ連結のための GROUP_CONCAT 関数を提供します。必要なデータを取得するには、次のクエリを実行します:
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
PostgreSQL と同様に、MS SQL Server はグループ連結に 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
フォールバック解決策
古いデータベース バージョンまたは準拠していないデータベースの場合は、フォールバック メソッドが存在します。
select o.ID, o.Address, o.OtherDetails, MY_CUSTOM_GROUP_CONCAT_PROCEDURE( o.ID ) as Employees from organization o
これらのデータベース固有のソリューションを実装するか、フォールバック方法を使用することにより、必要な情報を効率的かつ正確に取得できます。
以上がSQL データベース内の複数の関連レコードを効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。