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

如何在MySQL中根据精确匹配的症状查询对应疾病ID?

嗨,别担心英语的问题,完全能理解你的需求!我来帮你搞定这个MySQL查询的问题。

首先,咱们先明确核心需求:找出恰好只包含你传入的所有症状,没有额外症状的疾病ID。针对多对多的关联表,咱们可以用两种常见的思路来实现:

方法一:用NOT EXISTS排除额外症状

这种方法先筛选出包含所有目标症状的疾病,再排除掉还有其他症状的疾病:

-- 替换括号里的症状ID和数量为你实际传入的内容
SELECT ed.id_enfermedade
FROM enfermedades_diagnosticos ed
WHERE ed.id_symptom IN (2, 6) -- 这里传入你的症状ID列表
GROUP BY ed.id_enfermedade
HAVING COUNT(DISTINCT ed.id_symptom) = 2 -- 这里是传入症状的总数量
AND NOT EXISTS (
    -- 检查该疾病是否有不在传入列表里的症状
    SELECT 1
    FROM enfermedades_diagnosticos ed2
    WHERE ed2.id_enfermedade = ed.id_enfermedade
    AND ed2.id_symptom NOT IN (2, 6)
);

方法二:匹配症状总数和目标症状数

这种方法更简洁,直接统计疾病的总症状数,同时统计其中属于目标症状的数量,当两者都等于传入的症状数时,就是我们要的结果:

-- 同样替换症状列表和数量
SELECT ed.id_enfermedade
FROM enfermedades_diagnosticos ed
GROUP BY ed.id_enfermedade
HAVING COUNT(DISTINCT ed.id_symptom) = 7 -- 传入症状的总数量
AND SUM(CASE WHEN ed.id_symptom IN (1,2,3,4,5,6,7) THEN 1 ELSE 0 END) = 7;

对应你的需求场景举例

  • 当你传入症状2和6时,把代码里的症状列表改成(2,6),数量改成2,就能返回恰好只有这两个症状的疾病。
  • 传入1-7时,列表改成(1,2,3,4,5,6,7),数量改成7,就能匹配到ID为6的疾病。
  • 传入1-6时,数量设为6,但没有疾病的症状数刚好是6且完全包含这6个,所以会返回空结果,符合你的要求。

小提醒:如果你的表字段名和我假设的不一样(比如症状ID字段不是id_symptom),记得替换成实际的字段名哦!

内容的提问来源于stack exchange,提问作者Álex P.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:26:27