【发布时间】:2018-11-14 11:32:10
【问题描述】:
我有以下架构 + 数据:
create table org_users (
id character varying (255),
perdiem_ids character varying (255) --JSONized fk to perdiems.id. example data below
);
create table perdiems (
id integer,
name character varying(255)
);
insert into perdiems (id, name) values (1, 'perdiem 1');
insert into perdiems (id, name) values (2, 'perdiem 2');
insert into perdiems (id, name) values (3, 'perdiem 3');
insert into org_users (id, perdiem_ids) values ('user1', '{"allowed_per_diem_ids":[1, 2]}');
insert into org_users (id, perdiem_ids) values ('user2', '{"allowed_per_diem_ids":[2, 3]}');
insert into org_users (id, perdiem_ids) values ('user3', '{"allowed_per_diem_ids":[3, 1]}');
现在,我想要每个 org_user 允许的 perdiem 名称列表,例如:
org_user_id | allowed_per_diem_names
------------|---------------------------
user1 | ['perdiem 1', 'perdiem 2']
user2 | ['perdiem 2', 'perdiem 3']
user3 | ['perdiem 3', 'perdiem 1']
如果我使用以下查询,我可以获得单个用户的 perdiem 名称,但是记录是重复的,因为它是一个连接。
select ou.id, p.name from org_users ou
left join perdiems p ON p.id = ANY (SELECT json_array_elements(perdiem_ids::JSON->'allowed_per_diem_ids')::text::int from org_users);
输出:
| id | name |
| ----- | --------- |
| user1 | perdiem 1 |
| user1 | perdiem 2 |
| user1 | perdiem 3 |
| user2 | perdiem 1 |
| user2 | perdiem 2 |
| user2 | perdiem 3 |
| user3 | perdiem 1 |
| user3 | perdiem 2 |
| user3 | perdiem 3 |
现在,以我期望的格式获取记录的方法是什么?我希望连接操作的输出成为数组字段的单个元素。
【问题讨论】:
标签: sql arrays postgresql join