数据库任务经常需要将数据字段连接成逗号分隔的列表。 SQL 提供了高效的解决方案,无需过程代码。
示例:想象三个表:Applications
(id,名称)、Resources
(id,名称)和 ApplicationsResources
(id、app_id、resource_id)。目标是生成一份报告,显示每个资源名称以及以逗号分隔的关联应用程序列表。
这可以使用 GROUP_CONCAT
(MySQL 和某些 SQL Server 版本)或 STRING_AGG
(SQL Server 2017 及更高版本)来实现。这些函数有效地连接按特定列分组的值。
MySQL/某些 SQL Server 版本:
<code class="language-sql">SELECT r.name, GROUP_CONCAT(a.name SEPARATOR ',') AS application_names 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 Server 2017 及更高版本:
<code class="language-sql">SELECT r.name, STRING_AGG(a.name, ',') AS application_names 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 提供了多种字符串聚合方法,包括 LISTAGG
和 DBMS_PCL_ROWPKT
包。有关详细说明,请参阅 Oracle 文档。
这种基于 SQL 的方法提供了一种直接在数据库查询中生成逗号分隔列表的简化方法,从而改进了应用程序和 GUI 中的数据呈现。
以上是如何使用 SQL 从关系数据库表中高效创建逗号分隔列表?的详细内容。更多信息请关注PHP中文网其他相关文章!