Maison >base de données >tutoriel mysql >Comment puis-je récupérer tous les enregistrements d'employés d'une organisation spécifique dans une seule requête SQL ?

Comment puis-je récupérer tous les enregistrements d'employés d'une organisation spécifique dans une seule requête SQL ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-19 09:15:10960parcourir

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

Récupération de plusieurs enregistrements d'employés associés à une organisation dans un seul ensemble de résultats

La tâche à accomplir consiste à récupérer tous les détails d'une organisation spécifiée ainsi que les prénoms de ses salariés. Pour relever ce défi, il faut envisager une approche spécifique au fournisseur de base de données, car aucune solution universelle n'existe en SQL-92 ou SQL-99.

Dans le cas de MySQL, la fonction GROUP_CONCAT permet une récupération efficace des valeurs concaténées. Une requête utilisant cette fonction pourrait ressembler à ce qui suit :

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 fournit une solution tout aussi simple avec la fonction 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;

Pour les versions de PostgreSQL antérieures à 9.0, la fonction CREATE La commande AGGREGATE permet des définitions de fonctions d'agrégation personnalisées.

Oracle utilise LISTAGG pour des fonctionnalités similaires, tandis que MS SQL Server utilise STRING_AGG.

En l'absence de fonctions de concaténation de groupe intégrées, une option de secours consiste à créer une procédure stockée qui accepte l'ID de l'organisation comme entrée et renvoie les noms des employés concaténés. Cette procédure stockée peut ensuite être utilisée dans une requête :

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

En employant ces approches spécifiques au fournisseur, il est possible de récupérer plusieurs enregistrements d'employés relatifs à une seule organisation dans un seul ensemble de résultats.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn