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

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

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-22 03:23:14718ブラウズ

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

単一クエリで関連レコードを取得する

リレーショナル データベースの領域では、多くの場合、共有する異なるテーブルから複数のレコードをクエリする必要があります。関係。一般的なシナリオは、特定の組織に関するすべての情報とその従業員全員の名を取得することです。

これを実現するには、以下で説明するように、さまざまなデータベース固有の手法を活用できます。

MySQL および PostgreSQL:

MySQL の組み込み GROUP_CONCAT 関数を使用する、またはPostgreSQL の string_agg() を使用すると、特定の組織に関連するすべての従業員のファーストネームを集約して 1 つの文字列に結合できます:

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;

PostgreSQL 9.0 以降:

PostgreSQL 9.0 以降では STRING_AGG 関数が導入され、より柔軟な処理が可能になりました。連結:

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;

Oracle:

Oracle は、この目的のために LISTAGG 関数を提供しています:

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;

MS SQL Server:

MS SQL Server は STRING_AGG を提供しますfunction:

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;

他のデータベースのフォールバック ソリューション:

データベースがこれらの組み込み関数をサポートしていない場合は、フォールバック ソリューションを選択できます。組織 ID を入力として受け取り、それに応じて従業員名を連結するストアド プロシージャを作成します。

SELECT
  o.ID,
  o.Address,
  o.OtherDetails,
  MY_CUSTOM_GROUP_CONCAT_PROCEDURE(o.ID) AS Employees
FROM organization AS o;

Byこれらの手法を使用すると、関連テーブルから複数のレコードを効率的に取得し、統合された形式で表示できるため、複数のクエリや行ごとのデータの組み立てが不要になります。

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。