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

如何用MySQL查询开具过Morphine但未开具Naloxone的患者

筛选开具过Morphine但未开具Naloxone的患者

这里提供两种单表查询的有效方案,解决你需要的筛选需求:

方案1:分组聚合判断(推荐)

利用分组统计患者的药物处方情况,直接通过聚合条件筛选目标患者:

SELECT mo.ID, mo.surname, mo.firstname
FROM medorders mo
GROUP BY mo.ID, mo.surname, mo.firstname
HAVING COUNT(CASE WHEN mo.drugname = 'Morphine' THEN 1 END) > 0
   AND COUNT(CASE WHEN mo.drugname = 'Naloxone' THEN 1 END) = 0;

逻辑说明

  • 按患者唯一标识ID(配合姓名分组避免ID重复的极端情况)聚合所有处方记录
  • COUNT(CASE WHEN ... THEN 1 END)会统计符合条件的处方数量:
    • 统计值>0说明该患者有过Morphine处方
    • 统计值=0说明该患者从未开过Naloxone
  • 最终只保留同时满足两个条件的患者

方案2:NOT EXISTS子查询(修正版)

如果你之前用EXISTS失败,大概率是子查询没正确关联患者ID,以下是正确写法:

SELECT DISTINCT mo.ID, mo.surname, mo.firstname
FROM medorders mo
WHERE mo.drugname = 'Morphine'
  AND NOT EXISTS (
    SELECT 1
    FROM medorders mo2
    WHERE mo2.ID = mo.ID
      AND mo2.drugname = 'Naloxone'
  );

逻辑说明

  • 先筛选出所有开了Morphine的处方记录
  • 通过NOT EXISTS子查询排除那些同一ID患者有Naloxone处方的情况
  • 用DISTINCT避免同一个患者因多条Morphine记录重复输出

示例验证

假设你的示例数据如下:

surnamefirstnamedrugname
McdonaldOldMorphine
DoeJohnMorphine
DoeJohnNaloxone
SmithJaneNaloxone

执行上述任意SQL,都会返回唯一结果:Old Mcdonald,符合你的预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 06:01:35