我有以下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 = ''谢谢,史蒂夫
发布于 2019-01-24 04:11:18
您的主表(从)应该是用户表,而不是地区访问。从您的用户到所有地区的交叉连接将获得该用户和所有地区的所有排列(或者,您可以在任意语句上使用join,就像在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 = ''https://stackoverflow.com/questions/54333734
复制相似问题