使用SQL查询创建逗号分隔列表
当多个表包含应用程序和资源数据时,一个常见的任务是列出一个表,其中列出所有资源名称以及用逗号分隔的关联应用程序名称。要使用单个SQL查询实现此目的,请按照以下步骤操作:
MySQL:
<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 (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(','), '') AS application_names FROM RESOURCES r</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: Oracle 提供多种字符串聚合/连接选项。请参考文档了解具体的语法和要求。
这些查询将“RESOURCES”表与“APPLICATIONSRESOURCES”和“APPLICATIONS”表连接起来,以检索资源名称和关联的应用程序名称。“GROUP_CONCAT”、“STUFF”或“STRING_AGG”函数随后用于将应用程序名称连接到每个资源的逗号分隔列表中。 为了提高可读性,我们为结果列添加了别名 application_names
。
以上是如何在 SQL 中创建关联应用程序名称的逗号分隔列表?的详细内容。更多信息请关注PHP中文网其他相关文章!