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

SQL使用EXISTS语句筛选患diabetes无COPD/HIV患者数据问题咨询

原查询问题说明

原查询逻辑存在缺陷:仅校验了当前患者存在某一行糖尿病记录且该行本身不是HIV/COPD,没有校验该患者的所有记录中是否完全不存在HIV或COPD相关记录,所以会把同时患有糖尿病和HIV/COPD的患者也筛选出来,不符合需求。


可实现需求的替代方案

方案1:分组筛选后关联原表

逻辑直观可读性强,适合数据量中等的场景:

SELECT t.*
FROM patient_table t
INNER JOIN (
    SELECT patient_id
    FROM patient_table
    GROUP BY patient_id
    HAVING SUM(CASE WHEN disease LIKE '%diabetes%' THEN 1 ELSE 0 END) > 0
       AND SUM(CASE WHEN disease LIKE '%HIV%' OR disease LIKE '%COPD%' THEN 1 ELSE 0 END) = 0
) qualified_patients ON t.patient_id = qualified_patients.patient_id

逻辑说明:子查询先按患者ID分组,筛选出同时满足「至少有1条糖尿病记录」、「没有任何HIV或COPD相关记录」的患者ID列表,再关联原表取出这些患者的全量行数据。

方案2:EXISTS + NOT EXISTS组合

兼容原有写法习惯:

SELECT t.*
FROM patient_table t
WHERE 
-- 条件1:该患者存在糖尿病相关记录
EXISTS (
    SELECT 1 
    FROM patient_table t2 
    WHERE t2.patient_id = t.patient_id 
      AND t2.disease LIKE '%diabetes%'
)
-- 条件2:该患者完全没有HIV或COPD相关记录
AND NOT EXISTS (
    SELECT 1
    FROM patient_table t3
    WHERE t3.patient_id = t.patient_id
      AND (t3.disease LIKE '%HIV%' OR t3.disease LIKE '%COPD%')
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:57:04