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抱歉,我的错误。这是虚拟数据,我更改了它