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

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

Linda Hamilton
Libérer: 2024-12-29 19:18:11
original
604 Les gens l'ont consulté

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

Récupération de plusieurs enregistrements basés sur des relations

Lorsque vous traitez des tables de base de données avec des relations, une tâche courante consiste à récupérer des informations à partir de plusieurs tables en fonction de une relation spécifique. Par exemple, considérons deux tables : Organisation et Employé, où une organisation peut avoir plusieurs employés. L'objectif est de récupérer toutes les informations sur une organisation particulière, y compris le prénom de tous ses employés, dans un seul jeu d'enregistrements.

Solutions spécifiques aux bases de données

Le L’approche appropriée pour cette tâche varie en fonction du système de base de données utilisé. Certains systèmes de bases de données populaires offrent des fonctions ou des fonctionnalités spécifiques qui peuvent faciliter la concaténation de groupes, le processus de combinaison de plusieurs valeurs en une seule chaîne :

  • MySQL : Utilisez la fonction GROUP_CONCAT pour concaténer les prénoms des employés basés sur le nom de l'Organisation ID.
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 fournit la fonction STRING_AGG pour la concaténation de groupe, qui peut être utilisée pour ajouter les prénoms des employés avec une virgule. espace délimiteur.
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 propose la fonction LISTAGG pour concaténer des valeurs.
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 : MS SQL Server 2017 et versions ultérieures ont introduit la fonction STRING_AGG pour 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

Solutions de secours

Dans les systèmes de bases de données dépourvus de fonctions natives de concaténation de groupe ou pour les anciennes versions des bases de données prises en charge, des solutions de secours peuvent être employé :

  • Créez une procédure stockée qui accepte l'ID de l'organisation et renvoie les noms des employés concaténés. Intégrez 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

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