ホームページ >データベース >mysql チュートリアル >単一の SQL クエリで特定の組織のすべての従業員レコードを取得するにはどうすればよいですか?

単一の SQL クエリで特定の組織のすべての従業員レコードを取得するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-19 09:15:10972ブラウズ

How Can I Retrieve All Employee Records for a Specific Organization in a Single SQL Query?

組織に関連付けられた複数の従業員レコードを単一の結果セットで取得する

当面のタスクには、指定された組織のすべての詳細を取得することが含まれます従業員のファーストネームも一緒に。 SQL-92 や SQL-99 には普遍的な解決策が存在しないため、この課題に取り組むにはデータベース ベンダー固有のアプローチを検討する必要があります。

MySQL の場合、GROUP_CONCAT 関数を使用すると効率的にデータを取得できます。連結された値。この関数を利用するクエリは次のようになります。

SELECT 
  o.ID, o.Address, o.OtherDetails,
  GROUP_CONCAT( CONCAT(e.firstname, ' ', e.lastname) ) AS Employees
FROM 
  employees e 
JOIN 
  organization o ON o.org_id=e.org_id
GROUP BY 
  o.org_id;

PostgreSQL 9.0 では、STRING_AGG 関数を使用した同様に簡単なソリューションが提供されます。

SELECT 
  o.ID, o.Address, o.OtherDetails,
  STRING_AGG( (e.firstname || ' ' || e.lastname), ', ' ) AS Employees
FROM 
  employees e 
JOIN 
  organization o ON o.org_id=e.org_id
GROUP BY 
  o.org_id;

9.0 より前のバージョンの PostgreSQL では、CREATE AGGREGATE コマンドを使用すると、カスタム集計関数を定義できます。

Oracle は LISTAGG を採用しています同様の機能については、MS SQL Server は STRING_AGG を使用します。

組み込みのグループ連結関数がない場合、フォールバック オプションでは、入力として組織 ID を受け取り、連結された従業員名を返すストアド プロシージャを作成する必要があります。 。このストアド プロシージャはクエリ内で利用できます。

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

これらのベンダー固有のアプローチを採用することで、単一の結果セットで単一の組織に関連する複数の従業員レコードを取得できます。

以上が単一の SQL クエリで特定の組織のすべての従業員レコードを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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