【问题标题】:SQL Get multiple values into one column separated by commaSQL 获取多个值到一列中,以逗号分隔
【发布时间】:2018-10-28 17:39:40
【问题描述】:

需要有关此 SQL 查询的帮助。节点是一个产品表,每个产品在表 field_data_field_images 上有 n 个图像。我需要将所有这些图像文件名选择到以逗号分隔的一列中(例如“image1.jpg,image2.jpg”等)。所以首先我需要从 field_data_field_images 中获取所有图像 ID,然后从 file_managed 中获取文件名本身。

SELECT node.*,
file_managed.filename,
field_data_field_product_code.field_product_code_value,
FROM node

LEFT JOIN field_data_field_images ON node.nid = field_data_field_images.entity_id
LEFT JOIN file_managed ON field_data_field_images.field_images_fid = file_managed.fid

WHERE node.language = 'lt' AND node.type = 'products'
GROUP BY nid

【问题讨论】:

  • 你想做一个 Pivot。看看这个Thread
  • 提示:group_concat

标签: mysql sql


【解决方案1】:

您可以使用group_concat()。以下查询还引入了表别名,因此查询更易于编写和阅读:

SELECT n.*,
       GROUP_CONCAT(fm.filename) as filenames
FROM node n LEFT JOIN
     field_data_field_images dfi
     ON n.nid = dfi.entity_id LEFT JOIN
     file_managed fm
     ON dfi.field_images_fid = fm.fid
WHERE n.language = 'lt' AND n.type = 'products'
GROUP BY n.nid

【讨论】:

    【解决方案2】:

    如果 MS-SQL 遵循以下代码:

     DECLARE @TableVar TABLE
     (
      nid INT ,
      images NVARCHAR(400)
     );
     INSERT INTO @TableVar
        ( nid ,
          images
        )
        SELECT nid,images
    
    FROM node
    
    LEFT JOIN field_data_field_images 
    ON node.nid =     field_data_field_images.entity_id
    LEFT JOIN file_managed 
    ON field_data_field_images.field_images_fid =   file_managed.fid
    
    WHERE node.language = 'lt' AND node.type = 'products'
    GROUP BY nid
    
    SELECT DISTINCT
        nid ,
        STUFF(( SELECT  ',' + images
                FROM    @TableVar AS T
                WHERE   T.nid = T2.nid
              FOR
                XML PATH('')
              ), 1, 1, '') AS images
     FROM   @TableVar T2
     GROUP BY nid ,
        images 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多