リレーションに基づく複数のレコードの取得
リレーションを持つデータベース テーブルを扱う場合、一般的なタスクは、リレーションシップに基づいて複数のテーブルから情報を取得することです。特定の関係。たとえば、Organization と Employee という 2 つのテーブルについて考えてみましょう。1 つの組織が複数の従業員を持つことができます。目標は、全従業員の名を含む、特定の組織に関するすべての情報を 1 つのレコード セットで取得することです。
データベース固有のソリューション
このタスクに適したアプローチは、使用されているデータベース システムによって異なります。一部の一般的なデータベース システムは、グループ連結、つまり複数の値を 1 つの文字列に結合するプロセスを容易にする特定の関数や機能を提供しています。
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
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, 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
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
以上が単一のクエリで複数のデータベーステーブルから関連レコードを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。