首页 >数据库 >mysql教程 >如何从多个 SQL 表高效生成逗号分隔的列表?

如何从多个 SQL 表高效生成逗号分隔的列表?

Barbara Streisand
Barbara Streisand原创
2025-01-18 22:21:11137浏览

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

整合SQL查询生成逗号分隔列表

在SQL中,经常需要从多个表中的数据生成逗号分隔列表。例如,假设您有三个表:Applications(id,name)、Resources(id,name)和ApplicationsResources(id,app_id,resource_id),并且您希望创建一个表来显示所有资源名称,其中每一行都包含与该资源关联的应用程序的逗号分隔列表。

最简单的方法是为每个资源执行单独的查询,但这效率低下。相反,我们可以利用更复杂的SQL技术在一个查询中实现这一点。

方法:

以下SQL查询演示了如何实现这一点:

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 Server (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 Server (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中,字符串聚合和连接的处理方式有所不同。请参考Oracle文档了解具体的字符串处理技术。

以上是如何从多个 SQL 表高效生成逗号分隔的列表?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn