Maison > base de données > tutoriel mysql > Comment créer efficacement des listes d'applications associées séparées par des virgules dans SQL ?

Comment créer efficacement des listes d'applications associées séparées par des virgules dans SQL ?

Mary-Kate Olsen
Libérer: 2025-01-18 22:12:13
original
774 Les gens l'ont consulté

How to Efficiently Create Comma-Separated Lists of Associated Applications in SQL?

Générer des listes séparées par des virgules : une approche SQL

La présentation efficace des données agrégées est cruciale dans la gestion des bases de données. Cela implique souvent de créer des listes séparées par des virgules. Examinons comment y parvenir à l'aide d'une seule requête SQL, en nous concentrant sur différents systèmes de bases de données. Nous utiliserons un schéma de base de données avec les tables Applications, Resources et ApplicationsResources. L'objectif est d'afficher le nom de chaque ressource à côté d'une liste de ses applications associées, séparées par des virgules.

Solution optimisée à requête unique

Pour éviter les problèmes de performances associés à plusieurs requêtes, une seule requête est l'approche la plus efficace. Cela implique de joindre les tables pertinentes et d'utiliser les fonctions d'agrégation de chaînes appropriées. La fonction spécifique varie en fonction du système de base de données : GROUP_CONCAT (MySQL), STUFF (SQL Server 2005 ), STRING_AGG (SQL Server 2017 ) ou les méthodes d'agrégation de chaînes intégrées d'Oracle.

Implémentations spécifiques à la base de données

  • MySQL :
SELECT r.name, GROUP_CONCAT(a.name SEPARATOR ',') AS application_list
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 Server (2005 et versions ultérieures) : Utilisation de la fonction STUFF :
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
              FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '') AS application_list
FROM RESOURCES r;
Copier après la connexion
  • SQL Server (2017 et versions ultérieures) : Utilisation de la fonction STRING_AGG plus concise :
SELECT r.name, STRING_AGG(a.name, ',') AS application_list
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 : L'approche d'Oracle implique l'utilisation de LISTAGG ou de techniques d'agrégation de chaînes similaires. Consultez la documentation Oracle pour la syntaxe spécifique.

Résumé

Ces solutions à requête unique fournissent des méthodes efficaces pour générer des listes d'applications associées séparées par des virgules pour chaque ressource. Le choix de la fonction dépend du système de base de données utilisé, garantissant des performances et une présentation des données optimales pour l'interface utilisateur de votre application.

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