【发布时间】:2021-06-27 18:40:18
【问题描述】:
我有一张表users如下:
| id | name |
| 1 | Marvin Hargraves |
| 2 | Lincoln Clayton |
| 3 | Frank Pearce |
还有一个表posts,我在其中获得了带有属性的json列:
| id | attributes | content |
| 11 | {"user_ids":["1", "2"]} | "xyz" |
| 12 | {"user_ids":["1", "3"]} | "xyz" |
数组中的 ID 引用 users 表中的用户。
我需要显示用户名而不是 ID,例如:
| id | users |
as an array
| 11 | ["Marvin Hargraves", "Lincoln Clayton"] |
or string
| 12 | "Marvin Hargraves, Frank Pearce" |
我使用的是 PostgreSQL 版本 10。
我试过这个查询:
SELECT p.id,
(SELECT array_agg(array[u.name])
FROM post AS p
JOIN user u ON u.id = ANY(p.attributes->'user_ids')
GROUP BY p.id) AS users
FROM post p
但我收到以下错误:
ERROR: op ANY/ALL (array) requires array on right side
【问题讨论】:
-
json 还是 jsonb?您是只查询 id 和 users,还是实际查询中的更多列?
标签: sql arrays postgresql join aggregate-functions