整合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中文网其他相关文章!