Sql 我在Postgres左连接查询中得到重复的值
我得到了用户角色和团队的重复值,一个用户可以有多个角色,但我得到了重复值:例如:Sql 我在Postgres左连接查询中得到重复的值,sql,postgresql,left-join,Sql,Postgresql,Left Join,我得到了用户角色和团队的重复值,一个用户可以有多个角色,但我得到了重复值:例如: "roles": [ { "role_id": 1, "role_name": "Admin" }, { "role_id": 1, "role_name&qu
"roles": [
{
"role_id": 1,
"role_name": "Admin"
},
{
"role_id": 1,
"role_name": "Admin"
},
{
"role_id": 2,
"role_name": "Moderator"
},
{
"role_id": 2,
"role_name": "Moderator"
}
],
我的问题是:
with aggs as (
select u.user_id, u.first_name, u.last_name,
jsonb_agg(to_jsonb(r)) as roles,
jsonb_agg(to_jsonb(t)) as teams,
jsonb_agg(to_jsonb(s)) as something_else
from users u
left join user_role ur on ur.user_id = u.user_id
left join roles r on r.role_id = ur.role_id
left join user_team ut on ut.user_id = u.user_id
left join teams t on t.team_id = ut.team_id
left join user_something_else us on us.user_id = u.user_id
left join something_else s on s.something_else_id = us.something_else_id
group by u.user_id, u.first_name, u.last_name
)
select to_jsonb(aggs)
from aggs
where user_id = 1;
表格示例
create table users (
user_id serial primary key,
first_name text not null,
last_name text not null,
-- other columns here
);
create table roles (
role_id serial primary key,
role_name text not null unique,
-- other columns here
);
create table user_role (
id serial primary key,
user_id int not null references users(user_id),
role_id int not null references roles(role_id),
unique(user_id, role_id)
);
用户角色表不包含重复项。但是查询返回的是重复的
我如何将副本元素化?我尝试在u.user\u id上进行DISTNICT,但没有解决问题。您是否确保
user\u其他内容。user\u id
和(user\u team.user\u id,user\u team.team\u id)
是唯一的?顺便说一句,不需要按u.first\u name和u.last\u name分组,因为u.user\u id是主键。@stefanov.sm是的,它们都是唯一的。表和数据有问题。为什么会有“角色id”:1,“角色名称”:“主持人”
和“角色id”:1,“角色名称”:“管理员”
如果角色id是主键?@Stefanov.sm抱歉,我的错误。这是虚拟数据,我更改了它