使用SQL查询分隔列表?
我有3个表称为:
我想在GUI上显示所有资源名称的表格。 在每一行中的一个单元格中,我想列出该资源的所有应用程序(以逗号分隔)。
所以问题是,在SQL中执行此操作的最佳方式是什么,因为我需要获取所有资源,并且还需要获取每个资源的所有应用程序?
我是否首先从资源运行select *,然后遍历每个资源并对每个资源执行单独的查询以获取该资源的应用程序列表?
有没有办法在一个查询中做到这一点?
没有办法以数据库不可知的方式来做到这一点。 所以你需要像这样得到整个数据集:
select
r.name as ResName,
a.name as AppName
from
Resouces as r,
Applications as a,
ApplicationsResources as ar
where
ar.app_id = a.id
and ar.resource_id = r.id
然后以ResName编组的同时以编程方式连接AppName。
MySQL的
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
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('.','VARCHAR(max)'), 1, 1, '')
FROM RESOURCES r
SQL Server(2017+)
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
神谕
我建议阅读关于Oracle中的字符串聚合/连锁共享。
使用COALESCE在SQL Server中构建逗号分隔的字符串
http://www.sqlteam.com/article/using-coalesce-to-build-comma-delimited-string
例:
DECLARE @EmployeeList varchar(100)
SELECT @EmployeeList = COALESCE(@EmployeeList + ', ', '') +
CAST(Emp_UniqueID AS varchar(5))
FROM SalesCallsEmployees
WHERE SalCal_UniqueID = 1
SELECT @EmployeeList
链接地址: http://www.djcxy.com/p/44415.html
上一篇: Separated List using a SQL Query?
下一篇: Missing output files after running Ant script from Eclipse