Maison > base de données > tutoriel mysql > Comment générer efficacement des listes séparées par des virgules à partir de plusieurs tables SQL ?

Comment générer efficacement des listes séparées par des virgules à partir de plusieurs tables SQL ?

Barbara Streisand
Libérer: 2025-01-18 22:21:11
original
202 Les gens l'ont consulté

How to Efficiently Generate Comma-Separated Lists from Multiple SQL Tables?

Intégrez des requêtes SQL pour générer des listes séparées par des virgules

En SQL, il est souvent nécessaire de générer des listes séparées par des virgules à partir des données de plusieurs tables. Par exemple, supposons que vous ayez trois tables : Applications(id,name), Resources(id,name) et ApplicationsResources(id,app_id,resource_id), et que vous souhaitiez créer une table qui affiche tous les noms de ressources, où chaque ligne contient une liste d'applications séparées par des virgules et associées à la ressource.

Le moyen le plus simple consiste à effectuer une requête distincte pour chaque ressource, mais cela est inefficace. Au lieu de cela, nous pouvons exploiter des techniques SQL plus complexes pour y parvenir en une seule requête.

Méthode :

La requête SQL suivante montre comment y parvenir :

MySQL :

SELECT r.name,
         GROUP_CONCAT(a.name SEPARATOR ',')
    FROM RESOURCES r
    JOIN APPLICATIONSRESOURCES ar ON ar.resource_id = r.id
    JOIN APPLICATIONS a ON a.id = ar.app_id
GROUP BY r.name
Copier après la connexion

SQL Serveur (2005) :

SELECT r.name,
       STUFF((SELECT ',' + a.name
               FROM APPLICATIONS a
               JOIN APPLICATIONRESOURCES ar ON ar.app_id = a.id
              WHERE ar.resource_id = r.id
           GROUP BY a.name
            FOR XML PATH(''), TYPE).value('text()[1]','NVARCHAR(max)'), 1, LEN(','), '')
 FROM RESOURCES r
Copier après la connexion

SQL Serveur (2017) :

SELECT r.name,
         STRING_AGG(a.name, ',')
    FROM RESOURCES r
    JOIN APPLICATIONSRESOURCES ar ON ar.resource_id = r.id
    JOIN APPLICATIONS a ON a.id = ar.app_id
GROUP BY r.name
Copier après la connexion

Oracle :

Dans Oracle, les agrégations et jointures de chaînes sont gérées différemment. Veuillez vous référer à la documentation Oracle pour connaître les techniques de traitement de chaînes spécifiques.

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!

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