You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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
  • 子查询复用:直接保留原两个查询中NOT EXISTS/EXISTS的子查询逻辑,确保表关联条件正确
  • 逻辑优先级:每个场景用括号包裹,保证AND的优先级高于OR,避免逻辑混乱

验证要点

  • 用ope1登录:确认已排除KKS_Konto为konto1/2/3的数据
  • 用ope4登录:确认仅显示KKS_Konto以01/02开头的数据
  • 用非指定用户(如ope6)登录:确认返回全部数据

内容的提问来源于stack exchange,提问作者benek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 00:42:08