我在尝试弄清楚如何选择多个值的多个记录时遇到了一些麻烦。让我试着把它分解。
我有两张桌子。
表1:疾病
表2:症状
我想要做的是当用户输入症状时,它会通过疾病表并找到与之相关的匹配症状,然后它将返回有症状的疾病。
这是我到目前为止的SQL查询:
select a.diseases_id, a.disease_name
from diseases a, symtoms b
where a.diseases_id = b.diseases_id
and b.symtom_description like '%Cough%' AND b.symtom_description like '%Sore throat%';
现在问题是这个SQL查询什么都没有返回,但是如果我删除AND语句,它会返回包含" Cough"的所有疾病。在他们的症状,但这不是我想要的。我应该能够选择一堆症状,如果疾病具有所有症状并且它们匹配,它将返回疾病。对于我发布的查询,它应该返回" Gastroesophageal Reflux"因为只有咳嗽和喉咙痛的疾病。
有人能给我任何关于如何使这项工作的指示吗?
谢谢!
答案 0 :(得分:2)
没有行,其中包含“咳嗽” AND “喉咙痛”,所以当然你会得到一个空洞的结果。
我会尝试这样的事情(未经测试):
select a.diseases_id, a.disease_name, b.symtom_description
from diseases a, symtoms b
where a.diseases_id = b.diseases_id
and (b.symtom_description like '%Cough%' OR b.symtom_description like '%Sore throat%')
group by a.diseases_id
having count(a.diseases_id)=2
答案 1 :(得分:1)
上述查询可以使用下面的ansi兼容连接语句
编写SELECT a.diseases_id, a.disease_name, b.symptom_description
FROM diseases AS a JOIN symptoms AS b
ON a.diseases_id = b.diseases_id
WHERE b.symptom_description like '%Cough%' OR b.sypmtom_description like '%Sore throat%'
GROUP BY a.diseases_id
HAVING COUNT(a.diseases_id) = 2