子查询是否适用于这种情况



我有以下 6 个表

地区 - 包含地区 ID 和地区名称

District_access - 用于标识用户有权访问哪些地区

operation_centers - 包含运营中心 ID 和名称

ops_access - 用于标识用户有权访问的运营中心

项目

- 包含项目 ID 和名称

project_access - 用于标识用户有权访问哪些项目

我目前正在使用此查询,它返回用户有权访问的地区、运营中心和项目。问题是,如果用户只能访问第 4 区,我不会在我的编辑页面上看到任何其他区,我只能看到第 4 区以及第 4 区下的运营中心和项目。我需要查看其他地区,以便用户可以分配对其他地区、运营中心和项目等的访问权限,子查询对此有帮助吗?

   select district_access_id,district_user_nm,district_role,district_id,district_name,operation_center_id,operation_center_name,oc_district_id,project_name_id,project_name,project_oc_id
from district_access
left join districts ON district_access.district_access_id = districts.district_id
left join operation_centers ON districts.district_id = operation_centers.oc_district_id
left join projects ON operation_centers.operation_center_id = projects.project_oc_id
where district_user_nm = '#URL.user_id#' AND oc_district_id <> '' and project_oc_id <> '' OR district_user_nm = ''

谢谢史蒂夫

您的主表 (FROM) 应该是用户表,而不是区域访问。从您的用户到所有选区的交叉联接将获得该用户和所有选区的所有排列(或者您可以在任意语句(如 ON 1=1)上左联接)。此外,您应该在 WHERE 中使用括号,因为该 OR 以确保明确定义逻辑。

select district_access_id,district_user_nm,district_role,district_id,district_name,operation_center_id,operation_center_name,oc_district_id,project_name_id,project_name,project_oc_id
from <USERNAME TABLE>
cross join districts
left join district_access ON district_access.district_access_id = districts.district_id
   and <USERNAME TABLE>.user_nm = '#URL.user_id#'
left join operation_centers ON districts.district_id = operation_centers.oc_district_id
left join projects ON operation_centers.operation_center_id = projects.project_oc_id
where <USERNAME TABLE>.user_nm = '#URL.user_id#'
    AND oc_district_id <> ''
    and project_oc_id <> ''
    OR district_user_nm = ''

相关内容

最新更新