基于ope角色合并两个SQL EXISTS/NOT EXISTS查询的问题
合并后的SQL查询解决方案
直接在WHERE子句中通过用户组匹配+对应过滤规则的组合逻辑,同时覆盖"无匹配角色时不过滤"的场景,避免之前用OR/AND合并时的逻辑冲突问题:
SELECT * FROM your_table main WHERE -- 场景1:ope1/ope2/ope3登录时,隐藏指定KKS_Konto数据 ( -- 替换为你实际获取当前登录用户的函数,比如SQL Server用SUSER_NAME(),MySQL用USER() SESSION_USER IN ('ope1', 'ope2', 'ope3') AND NOT EXISTS ( SELECT 1 FROM your_subquery_table sub WHERE main.关联字段 = sub.关联字段 -- 保留原查询的表关联逻辑 AND sub.KKS_Konto IN ('konto1', 'konto2', 'konto3') ) ) OR -- 场景2:ope4/ope5登录时,仅显示以01/02开头的KKS_Konto ( SESSION_USER IN ('ope4', 'ope5') AND EXISTS ( SELECT 1 FROM your_subquery_table sub WHERE main.关联字段 = sub.关联字段 -- 保留原查询的表关联逻辑 AND (sub.KKS_Konto LIKE '01%' OR sub.KKS_Konto LIKE '02%') ) ) OR -- 场景3:无匹配角色时,不做任何过滤 SESSION_USER NOT IN ('ope1', 'ope2', 'ope3', 'ope4', 'ope5')
关键注意事项
- 用户获取函数替换:根据你的数据库类型替换
SESSION_USER:- SQL Server:
SUSER_NAME()或CURRENT_USER - MySQL:
USER()或CURRENT_USER() - Oracle:
USER
- SQL Server:
- 子查询复用:直接保留原两个查询中
NOT EXISTS/EXISTS的子查询逻辑,确保表关联条件正确 - 逻辑优先级:每个场景用括号包裹,保证
AND的优先级高于OR,避免逻辑混乱
验证要点
- 用ope1登录:确认已排除KKS_Konto为konto1/2/3的数据
- 用ope4登录:确认仅显示KKS_Konto以01/02开头的数据
- 用非指定用户(如ope6)登录:确认返回全部数据
内容的提问来源于stack exchange,提问作者benek
相关产品推荐
相关产品推荐

