Maison > base de données > tutoriel mysql > Comment récupérer efficacement plusieurs enregistrements associés dans des bases de données SQL ?

Comment récupérer efficacement plusieurs enregistrements associés dans des bases de données SQL ?

Patricia Arquette
Libérer: 2024-12-28 14:28:16
original
689 Les gens l'ont consulté

How to Efficiently Retrieve Multiple Related Records in SQL Databases?

Comment récupérer plusieurs enregistrements liés à un seul enregistrement

Dans la gestion de bases de données, il est souvent nécessaire de récupérer des données à partir de plusieurs tables qui sont connectés à travers des relations. Cet article démontre une méthode efficace pour récupérer toutes les informations sur une organisation spécifique ainsi que les prénoms de ses employés.

Le concept d'obtention de plusieurs enregistrements liés nécessite l'utilisation de la concaténation de groupes, qui n'est pas standardisée en SQL -92 ou SQL-99. Ainsi, des solutions spécifiques à la base de données sont nécessaires.

MySQL

MySQL fournit la fonction GROUP_CONCAT pour la concaténation de groupes. Pour récupérer les données souhaitées, exécutez la requête suivante :

select 
  o.ID, o.Address, o.OtherDetails,
  GROUP_CONCAT( concat(e.firstname, ' ', e.lastname) ) as Employees
from 
  employees e 
  inner join organization o on o.org_id=e.org_id
group by o.org_id
Copier après la connexion

PostgreSQL

PostgreSQL 9.0 a introduit la fonction STRING_AGG :

select 
  o.ID, o.Address, o.OtherDetails,
  STRING_AGG( (e.firstname || ' ' || e.lastname), ', ' ) as Employees
from 
  employees e 
  inner join organization o on o.org_id=e.org_id
group by o.org_id
Copier après la connexion

Oracle

Oracle fournit LISTAGG pour concaténation de groupe :

select 
  o.ID, o.Address, o.OtherDetails,
  LISTAGG(e.firstname || ' ' || e.lastname, ', ' ) as Employees
from 
  employees e 
  inner join organization o on o.org_id=e.org_id
group by o.org_id
Copier après la connexion

MS SQL Server

Similaire à PostgreSQL, MS SQL Server utilise STRING_AGG pour la concaténation de groupe :

select 
  o.ID, o.Address, o.OtherDetails,
  STRING_AGG(e.firstname || ' ' || e.lastname, ', ' ) as Employees
from 
  employees e 
  inner join organization o on o.org_id=e.org_id
group by o.org_id
Copier après la connexion

Solution de secours

Pour les anciennes versions de bases de données ou bases de données non conformes, une méthode de secours existe :

  1. Créez une procédure stockée qui prend l'ID de l'organisation en entrée et génère les noms des employés concaténés.
  2. Utilisez cette procédure stockée dans la requête :
select 
  o.ID, o.Address, o.OtherDetails,
  MY_CUSTOM_GROUP_CONCAT_PROCEDURE( o.ID ) as Employees
from 
  organization o
Copier après la connexion

En mettant en œuvre ces solutions spécifiques aux bases de données ou en utilisant la méthode de repli, vous pouvez récupérer les informations souhaitées de manière efficace et avec précision.

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