9

我想执行一些这样的查询:

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 魔术。

4

1 回答 1

23

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

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

如果您需要在逗号分隔列表中对文件名进行排序,您可以在较新的 Postgres 版本中使用 order by:

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 中使用它”的要求。如果该列包含多个文件,您如何期望总结果的正确顺序?您将需要向我们展示一些示例输出(基于一些示例数据)。

于 2013-02-18T10:32:15.847 回答