ホームページ > データベース > mysql チュートリアル > 単一のクエリで複数のデータベーステーブルから関連レコードを取得するにはどうすればよいですか?

単一のクエリで複数のデータベーステーブルから関連レコードを取得するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-29 19:18:11
オリジナル
604 人が閲覧しました

How to Retrieve Related Records from Multiple Database Tables in a Single Query?

リレーションに基づく複数のレコードの取得

リレーションを持つデータベース テーブルを扱う場合、一般的なタスクは、リレーションシップに基づいて複数のテーブルから情報を取得することです。特定の関係。たとえば、Organization と Employee という 2 つのテーブルについて考えてみましょう。1 つの組織が複数の従業員を持つことができます。目標は、全従業員の名を含む、特定の組織に関するすべての情報を 1 つのレコード セットで取得することです。

データベース固有のソリューション

このタスクに適したアプローチは、使用されているデータベース システムによって異なります。一部の一般的なデータベース システムは、グループ連結、つまり複数の値を 1 つの文字列に結合するプロセスを容易にする特定の関数や機能を提供しています。

  • MySQL: GROUP_CONCAT 関数を使用して、組織の名前に基づく従業員の名前ID.
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 関数を提供しており、これを使用して従業員の名をカンマで追加できます。空間delimiter.
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 サーバー: MS SQL サーバー 2017その後、グループ連結用の 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
ログイン後にコピー

フォールバック ソリューション

ネイティブのグループ連結機能が欠けているデータベース システム、または古いバージョンのサポートされているデータベースでは、フォールバック ソリューションを使用できます。雇用:

  • 組織の ID を受け入れ、連結された従業員名を返すストアド プロシージャを作成します。このストアド プロシージャをクエリに統合します。
select 
  o.ID, o.Address, o.OtherDetails,
  MY_CUSTOM_GROUP_CONCAT_PROCEDURE( o.ID ) as Employees
from 
  organization o
ログイン後にコピー

以上が単一のクエリで複数のデータベーステーブルから関連レコードを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート