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

如何通过WHERE子句结合多表存在性检查返回目标数据

调整SQL查询的WHERE子句以满足过滤需求

修改后的完整查询

SELECT
    p.id,              
    sp.Cohort,
    sp.programID,   
    sp.Inactive
FROM 
    dbo.people p
INNER JOIN 
    dbo.Programs sp ON p.id = sp.id
INNER JOIN 
    dbo.type ctp ON sp.typeid = ctp.programid
LEFT JOIN 
    dbo.address ppa ON p.id = ppa.id
-- 新增左连接关联table2,用于判断用户是否在豁免列表中
LEFT JOIN 
    dbo.table2 t2 ON p.id = t2.userid
WHERE 
    ctp.typeid = 'AType' 
    AND sp.Cohort = 2023
    -- 替换原有的Inactive过滤条件,组合两个核心判断
    AND (
        sp.Inactive = 'N'
        OR t2.userid IS NOT NULL
    )
ORDER BY
    p.id

逻辑说明

  1. 关联豁免表:通过LEFT JOIN关联存储豁免用户的table2,以此判断当前用户是否属于无需检查Inactive状态的群体
  2. 过滤条件组合:
    • 保留所有sp.Inactive = 'N'的记录(对应需求第一条)
    • 同时保留所有在table2中存在的用户记录,无论其sp.Inactive是Y还是N(对应需求第二条)
    • 自动排除sp.Inactive = 'Y'且不在table2中的记录(对应需求第三条)

对应示例验证

针对你给出的示例数据:

  • userid 1:Inactive='N',满足第一个条件,被返回
  • userid 2:Inactive='Y'但存在于table2,满足第二个条件,被返回
  • userid 3:Inactive='N',满足第一个条件,被返回
  • userid 4:Inactive='Y'且不在table2,两个条件都不满足,被排除

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 11:41:14