我想执行这样的查询:
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 魔法。
最佳答案
这将创建文件夹中所有文件的逗号分隔列表:
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 中使用它”的要求。如果该列包含多个文件,您如何期望总结果的正确顺序?您需要向我们展示一些样本输出(基于一些样本数据)。
关于postgresql - 将子查询结果列合并为一个列,然后在 ORDER BY 中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14933713/