Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从表中选择多个不同的值,并在表中计算它们是否匹配_Mysql_Mysql Workbench_Sql Like - Fatal编程技术网

Mysql 从表中选择多个不同的值,并在表中计算它们是否匹配

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

我在尝试找出如何选择具有多个值的多个记录时遇到一些问题。让我试着把它分解一下

我有两张桌子

表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_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个不同的东西,你当然需要调整这个限制。