使用SQL查询分隔列表?

我有3个表称为:

  • 应用程序(ID,名称)
  • 资源(id,名称)
  • ApplicationsResources(id,app_id,resource_id)
  • 我想在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