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

如何用SQL查询包含全部指定症状的疾病?

解决“查询具备所有选定症状的疾病”的SQL方案

你的原SQL逻辑存在矛盾:WHERE symptom_disease.id_symptom = 1 AND symptom_disease.id_symptom = 2要求单条关联记录的症状ID同时等于1和2,这显然不可能,所以无法得到结果。以下是两种可行的解决方案:

方案一:分组统计法(灵活适配多症状场景)

通过分组统计疾病关联的目标症状数量,筛选出数量等于选定症状总数的疾病:

SELECT d.id, d.disease
FROM disease d
JOIN symptom_disease sd ON d.id = sd.dss_id
WHERE sd.symp_id IN (1, 2) -- 替换为你选定的症状ID集合
GROUP BY d.id, d.disease
HAVING COUNT(DISTINCT sd.symp_id) = 2; -- 数字需与选定症状的数量一致

逻辑说明:

  1. 用IN筛选出所有包含目标症状的疾病关联记录
  2. 按疾病ID和名称分组,统计该疾病关联的不同目标症状数量
  3. 只有当统计数量等于选定症状总数时,说明该疾病拥有所有选定症状

方案二:多表关联法(适合少量症状场景)

针对每个选定症状,单独关联一次关联表,确保疾病同时匹配所有症状:

SELECT d.id, d.disease
FROM disease d
JOIN symptom_disease sd1 ON d.id = sd1.dss_id AND sd1.symp_id = 1
JOIN symptom_disease sd2 ON d.id = sd2.dss_id AND sd2.symp_id = 2;

逻辑说明:

每一次JOIN都要求疾病关联对应症状,只有同时满足所有JOIN条件的疾病,才会被查询出来,即同时拥有所有选定症状。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 17:16:11