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]

サブクエリは複数の結果を返す可能性があるため、結果を単一の列ファイル名に結合したいと考えています。

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バージョンで順序を使用できます。

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

ただし、「ORDERBYで使用する」という要件を理解しているかどうかはわかりません。列に複数のファイルが含まれている場合、結果全体の正しい順序をどのように期待しますか?(いくつかのサンプルデータに基づいて)いくつかのサンプル出力を表示する必要があります。

于 2013-02-18T10:32:15.847 に答える