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 ?
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!