Maison >base de données >tutoriel mysql >Comment puis-je générer des listes séparées par des virgules à l'aide de requêtes SQL ?
Lors des opérations de base de données, il est souvent nécessaire de générer une liste de valeurs séparées par des virgules. Par exemple, vous souhaiterez peut-être afficher une liste de toutes les applications associées à une ressource spécifique dans l'interface utilisateur. Bien qu'il soit possible de parcourir chaque ressource, de récupérer l'application et de les connecter vous-même, cette approche est inefficace et prend du temps.
Heureusement, la plupart des bases de données SQL fournissent des fonctions intégrées de concaténation de chaînes et d'agrégation. Voici les méthodes d'implémentation de plusieurs dialectes SQL couramment utilisés :
MySQL
<code class="language-sql">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</code>
SQL Serveur (2005)
<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 GROUP BY a.name FOR XML PATH(''), TYPE).value('text()[1]','NVARCHAR(max)'), 1, LEN(','), '') FROM RESOURCES r</code>
SQL Serveur (2017)
<code class="language-sql">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</code>
Oracle
Oracle propose une variété d'options de concaténation et d'agrégation de chaînes, veuillez vous familiariser avec la syntaxe spécifique de la version que vous utilisez.
Ces requêtes génèrent efficacement une liste d'applications séparées par des virgules pour chaque ressource, vous permettant de fournir les informations nécessaires à votre interface graphique avec une seule requête.
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!