Select子查询编写求助:处理带ALL权限值的多表关联匹配需求
实现方案
核心思路
将三类不同的权限规则拆分为独立查询,通过UNION ALL合并后去重即可同时适配两个场景:
- 普通权限条目(Dept_Code和Subject_Code都不为ALL)直接输出
- 部门级全科目权限(Dept_Code不为ALL、Subject_Code为ALL)关联科目主表拉取对应部门的所有科目
- 全局全量权限(Dept_Code为ALL且Subject_Code为ALL)直接拉取部门主表和科目主表的全量有效组合
完整SQL代码
SELECT DISTINCT Dept_Code, Subject_Code FROM ( -- 1. 处理普通非ALL权限条目 SELECT Dept_Code, Subject_Code FROM `Department Access Info` WHERE Dept_Code != 'ALL' AND Subject_Code != 'ALL' UNION ALL -- 2. 处理单部门全科目权限(Dept非ALL、Subject为ALL) SELECT a.Dept_Code, s.Subject_Code FROM `Department Access Info` a JOIN `Subject Code Master Table` s ON a.Dept_Code = s.Dept_Code WHERE a.Dept_Code != 'ALL' AND a.Subject_Code = 'ALL' UNION ALL -- 3. 处理全局全量权限(Dept和Subject都为ALL) SELECT d.Dept_Code, s.Subject_Code FROM `Department Access Info` a CROSS JOIN `Dept_Code_Master` d JOIN `Subject Code Master Table` s ON d.Dept_Code = s.Dept_Code WHERE a.Dept_Code = 'ALL' AND a.Subject_Code = 'ALL' ) t ORDER BY Dept_Code, Subject_Code
适配说明
- 场景1无
Dept_Code=ALL、Subject_Code=ALL的权限条目时,第三段查询无返回值,最终输出和场景1预期完全一致 - 场景2新增全局全量权限条目后,第三段查询会返回所有部门在科目主表中对应的有效科目,自动补全104部门的dd1科目,符合场景2预期
内容的提问来源于stack exchange,提问作者Db_Learner
相关产品推荐
相关产品推荐

