使用SQL查询创建逗号分隔列表
当多个表包含应用程序和资源数据时,一个常见的任务是列出一个表,其中列出所有资源名称以及用逗号分隔的关联应用程序名称。要使用单个SQL查询实现此目的,请按照以下步骤操作:
MySQL:
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
SQL Server (2005 ):
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
SQL Server (2017 ):
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
Oracle: Oracle 提供多种字符串聚合/连接选项。请参考文档了解具体的语法和要求。
这些查询将“RESOURCES”表与“APPLICATIONSRESOURCES”和“APPLICATIONS”表连接起来,以检索资源名称和关联的应用程序名称。“GROUP_CONCAT”、“STUFF”或“STRING_AGG”函数随后用于将应用程序名称连接到每个资源的逗号分隔列表中。 为了提高可读性,我们为结果列添加了别名 application_names
。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3