从表中选择多个不同的值并评估它们以获得表中的匹配项

时间:2016-05-13 16:50:29

标签: mysql mysql-workbench sql-like

我在尝试弄清楚如何选择多个值的多个记录时遇到了一些麻烦。让我试着把它分解。

我有两张桌子。

表1:疾病

enter image description here

表2:症状

enter image description here

我想要做的是当用户输入症状时,它会通过疾病表并找到与之相关的匹配症状,然后它将返回有症状的疾病。

这是我到目前为止的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"因为只有咳嗽喉咙痛的疾病。

有人能给我任何关于如何使这项工作的指示吗?

谢谢!

2 个答案:

答案 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