※PostgresSQLでの方法です。Mysqlとかは知りません。
こんな2つのテーブルがあったとして、、
<category_table>
category_id | category_name |
---|---|
1 | html |
2 | SQL |
3 | Git |
4 | PHP |
<story_table>
story_id | category_id |
---|---|
1 | 1 |
1 | 2 |
1 | 3 |
2 | 2 |
2 | 4 |
3 | 1 |
4 | 4 |
「story_idごとにcategory_nameをカンマ区切りで表示したい。」
そんな時あると思います!
そんな時は・・・
ARRAY_TO_STRING(カラム, ‘,’)
=配列を「,」区切り文字列にする
・・・ 「カラム, カラム, カラム」こんな感じになる。ウオー
で、やりたいこと
「story_idごとにcategory_nameをカンマ区切りで表示したい。」
を実現する方法
SELECT
story_id,
ARRAY_TO_STRING(ARRAY_AGG(category_name), ‘,’)
FROM category_table
LEFT JOIN story_table
USING(category_id)
GROUP BY
story_id;
ARRAY_AGG(カラム)
….複数行→配列に変換
今回はARRAY()ではダメだった
GROUP BY story_idで
story_idごとのcateory_nameを1行にするのがポイント!