Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 向查询添加第二个联接会使值重复_Mysql_Sql_Group By_Duplicates_Aggregate Functions - Fatal编程技术网

Mysql 向查询添加第二个联接会使值重复

Mysql 向查询添加第二个联接会使值重复,mysql,sql,group-by,duplicates,aggregate-functions,Mysql,Sql,Group By,Duplicates,Aggregate Functions,我有一个返回用户信息的sql查询,将他的权限与另一个注册了他的角色权限的表连接起来: SELECT U.*, array_agg(RP.permission) as permission FROM user U JOIN role_permissions RP ON RP.role = F.role WHERE U.email=$1 GROUP BY U.cpf -- U.cpf is the primary key 这返回了以下结果: { cpf: '11111111111', ro

我有一个返回用户信息的sql查询,将他的权限与另一个注册了他的角色权限的表连接起来:

SELECT U.*, array_agg(RP.permission) as permission
FROM user U
JOIN role_permissions RP ON RP.role = F.role
WHERE U.email=$1
GROUP BY U.cpf -- U.cpf is the primary key
这返回了以下结果:

{
  cpf: '11111111111',
  role: 'c-level',
  area: 'Administrativo Financeiro',
  ...,
  permission: [
    'can_edit_all_metrics',
    'can_edit_all_plans',
    'can_view_all_metrics',
    'can_generate_reports',
    ...
  ]
}
现在我尝试将他有权访问的区域添加到查询中,并尝试使用以下查询:

SELECT U.*, array_agg(RP.permission) as permission, 
        array_agg(AC.has_access_to) as areas_with_access
FROM user U
JOIN role_permissions RP ON RP.role = F.role
JOIN area_access AC ON AC.area = U.area
WHERE  U.email=$1
GROUP BY U.cpf
我得到的结果是:

{
  cpf: '11111111111',
  role: 'c-level',
  area: 'Administrativo Financeiro',
  ...,
  permission: [
    'can_edit_all_metrics',
    'can_edit_all_metrics',
    'can_edit_all_plans',
    'can_edit_all_plans',
    'can_view_all_metrics',
    'can_view_all_metrics',
    'can_generate_reports',
    'can_generate_reports',
    ...
  ],
  areas_with_access: [
    'Financeiro',
    'Test',
    'Financeiro',
    'Test',
    'Financeiro',
    'Test',
    'Financeiro',
    'Test',
    ...,
  ]
}
我已经尝试过左/右加入第二个表,将AC.area和AC.has\u access\u添加到GROUPBY子句中,但什么也没有发生。 通过将RP.permission添加到组中,使其仅返回两个权限,因为他只有两个可以访问的区域

我可以只向聚合函数添加
DISTINCT
,但我想知道是否有什么地方我做错了

这是角色权限表:

create table if not exists role_permissions (
    role character varying(50),
    permission character varying(50),
    
    constraint pk_role_permissions primary key (role, permission),
    constraint fk_role_permissions_role foreign key (role) references roles(role) on update cascade on delete cascade,
    constraint fk_role_permissions_permission foreign key (permission) references permissions(permission) on update cascade on delete cascade,
);
这是区域访问表:

create table if not exists area_access (
    area character varying(50) NOT NULL,
    has_access_to character varying(50) NOT NULL,
    
    constraint pk_area_access primary key (area, has_access_to),

    constraint fk_area foreign key (area) references area(area) on update cascade on delete cascade,
    constraint fk_has_access_to foreign key (has_access_to) references area(area) on update cascade on delete cascade,

    constraint ck_area_different CHECK (area != has_access_to)
);

@RiggsFolly所以在这种情况下我必须使用
DISTINCT