ホームページ > データベース > mysql チュートリアル > SQL データベース内の複数の関連レコードを効率的に取得するにはどうすればよいですか?

SQL データベース内の複数の関連レコードを効率的に取得するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-28 14:28:16
オリジナル
689 人が閲覧しました

How to Efficiently Retrieve Multiple Related Records in SQL Databases?

単一レコードに関連する複数のレコードを取得する方法

データベース管理では、多くの場合、複数のテーブルからデータをフェッチする必要があります。関係を通じてつながっています。この記事では、特定の組織に関するすべての情報とその従業員の名を取得する効率的な方法を説明します。

複数の関連レコードを取得するという概念には、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
ログイン後にコピー

フォールバック解決策

古いデータベース バージョンまたは準拠していないデータベースの場合は、フォールバック メソッドが存在します。

  1. 組織 ID を入力として受け取り、連結された従業員を出力するストアド プロシージャを作成します。
  2. このストアド プロシージャをquery:
select 
  o.ID, o.Address, o.OtherDetails,
  MY_CUSTOM_GROUP_CONCAT_PROCEDURE( o.ID ) as Employees
from 
  organization o
ログイン後にコピー

これらのデータベース固有のソリューションを実装するか、フォールバック方法を使用することにより、必要な情報を効率的かつ正確に取得できます。

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

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