Maison > base de données > tutoriel mysql > Comment récupérer des enregistrements associés à partir de différentes tables de base de données en une seule requête ?

Comment récupérer des enregistrements associés à partir de différentes tables de base de données en une seule requête ?

Patricia Arquette
Libérer: 2024-12-22 03:23:14
original
713 Les gens l'ont consulté

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

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;
Copier après la connexion

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;
Copier après la connexion

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;
Copier après la connexion

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;
Copier après la connexion

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;
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal