我在试图找出如何选择多个具有多个值的记录时遇到了一些困难。让我试着把它分解。
我有两张桌子。
表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查询什么都不返回,但是如果删除和语句,它会返回所有在其症状中包含“咳嗽”的疾病,但这不是我想要的。我应该能够选择一组症状,如果一个疾病有所有的症状,并且它们匹配,它将返回疾病。对于我发布的查询,应该返回“胃食管反流”,因为这种疾病只包含咳嗽和喉咙痛。
有人能给我指点如何使这件事成功吗?
谢谢!
发布于 2016-05-13 17:04:57
没有一行,其中包含“咳嗽”和“嗓子痛”,所以您当然会得到一个空的结果。
我会尝试这样的方法(未经测试):
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
发布于 2016-05-13 17:44:21
上面的查询可以使用下面的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
https://stackoverflow.com/questions/37215423
复制相似问题