Récupération d'enregistrements associés dans une seule requête
Dans le domaine des bases de données relationnelles, il est souvent nécessaire d'interroger plusieurs enregistrements de différentes tables qui partagent une relation. Un scénario courant consiste à récupérer toutes les informations sur une organisation spécifique ainsi que les prénoms de tous ses employés.
Pour y parvenir, nous pouvons exploiter diverses techniques spécifiques aux bases de données, comme décrit ci-dessous :
MySQL et PostgreSQL :
Utilisation de la fonction GROUP_CONCAT intégrée dans MySQL ou string_agg() dans PostgreSQL, nous pouvons regrouper tous les prénoms des employés liés à une organisation donnée et les combiner en une seule chaîne :
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 et versions ultérieures:
PostgreSQL 9.0 et versions ultérieures ont introduit la fonction STRING_AGG, qui permet plus de flexibilité dans concaténation :
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 fournit la fonction LISTAGG à cet effet :
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 propose le 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;
Solution de secours pour d'autres bases de données :
Si votre base de données ne prend en charge aucune de ces fonctions intégrées, vous pouvez opter pour une solution de repli en créant une procédure stockée qui prend l'ID de l'organisation comme entrée et concatène les noms des employés en conséquence :
SELECT o.ID, o.Address, o.OtherDetails, MY_CUSTOM_GROUP_CONCAT_PROCEDURE(o.ID) AS Employees FROM organization AS o;
En employant ces techniques, vous pouvez récupérez efficacement plusieurs enregistrements de tables associées et présentez-les sous une forme consolidée, éliminant ainsi le besoin de plusieurs requêtes ou d'assemblage de données ligne par ligne.
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!