2013-02-18 45 views
2

我想执行一些这样的查询:合并子查询结果列成一列然后按顺序使用由

SELECT 
    folders.*, 
    (SELECT 
     files.filename 
    FROM 
     files 
    WHERE 
     files.folder_id = folders.id 
    ) 
    as files 
FROM 
     folders 
ORDER BY 
    files[column name of filename] 

子查询可能会超过1分的结果,所以我想加盟将结果转换为单个列的文件名。

我正在使用Postgres。 我将Rails添加为标签,因为您可能会建议一些可以处理此问题的Rails魔术。

回答

8

这将创建该文件夹中的所有文件的逗号分隔的列表:

select folders.*, 
     (SELECT string_agg(files.filename, ',') 
     FROM files 
     WHERE files.folder_id = folders.id) as files 
from folders 

如果您需要在逗号分隔的列表进行排序的文件名,你可以通过在新的Postgres版本中使用的命令:

select folders.*, 
     (SELECT string_agg(files.filename, ',' order by files.filename) 
     FROM files 
     WHERE files.folder_id = folders.id) as files 
from folders 

我不确定我是否理解“并在ORDER BY中使用它”的要求。如果该列包含多个文件,那么您如何期望总结果的正确顺序?您需要向我们展示一些示例输出(基于一些示例数据)。

+0

后续问题,有没有一种方法来按字母顺序排序文件名? – RodM 2013-02-18 11:02:17

相关问题