Mysql 从表中选择多个不同的值,并在表中计算它们是否匹配
我在尝试找出如何选择具有多个值的多个记录时遇到一些问题。让我试着把它分解一下 我有两张桌子 表1:疾病 表2:症状 我想做的是,当用户输入一个症状时,它将遍历diseases表,找到与之相关的匹配症状,然后返回具有给定症状的疾病 这是我到目前为止的SQL查询:Mysql 从表中选择多个不同的值,并在表中计算它们是否匹配,mysql,mysql-workbench,sql-like,Mysql,Mysql Workbench,Sql Like,我在尝试找出如何选择具有多个值的多个记录时遇到一些问题。让我试着把它分解一下 我有两张桌子 表1:疾病 表2:症状 我想做的是,当用户输入一个症状时,它将遍历diseases表,找到与之相关的匹配症状,然后返回具有给定症状的疾病 这是我到目前为止的SQL查询: select a.diseases_id, a.disease_name from diseases a, symtoms b where a.diseases_id = b.diseases_id and b.symtom_des
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语句,它会返回所有症状中包含“咳嗽”的疾病,但这不是我想要的。我应该能够选择一系列症状,如果一种疾病有所有的症状,并且它们匹配,它将返回疾病。对于我发布的查询,它应该返回“胃食管反流”,因为它是只包含咳嗽和喉咙痛的疾病
有谁能给我指点怎么做
谢谢 没有包含“咳嗽”和“喉咙痛”的行,因此您当然会得到一个空结果 我会尝试这样(未经测试):
没有包含“咳嗽”和“喉咙痛”的行,因此您当然会得到一个空结果 我会尝试这样(未经测试):
可以使用下面符合ansi的join语句编写上述查询
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
可以使用下面符合ansi的join语句编写上述查询
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
你是一个活生生的储蓄者!工作起来很有魅力。你介意在小组讨论后解释一下这是怎么做到的吗?那么计数是如何工作的呢?=2的用途是什么?HAVING类似于聚合的WHERE子句,因此它在聚合之后应用(WHERE before)。我使用附加列b.symtom_description来确保聚合为每个symtom提供一行。当count(a.diseases_id)=2时,我请求a.diseases_id需要存在2倍于您在WHERE子句中指定的2个符号。如果你有3个或2个不同的东西,你当然需要适应这个限制。你是一个活生生的储蓄者!工作起来很有魅力。你介意在小组讨论后解释一下这是怎么做到的吗?那么计数是如何工作的呢?=2的用途是什么?HAVING类似于聚合的WHERE子句,因此它在聚合之后应用(WHERE before)。我使用附加列b.symtom_description来确保聚合为每个symtom提供一行。当count(a.diseases_id)=2时,我请求a.diseases_id需要存在2倍于您在WHERE子句中指定的2个符号。如果你有3个或2个不同的东西,你当然需要调整这个限制。