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 ?
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
<code class="language-sql">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;</code>
STUFF
:<code class="language-sql">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;</code>
STRING_AGG
plus concise :<code class="language-sql">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;</code>
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!