我如何从MySQL中与疾病相关的症状中发现疾病?

我如何从MySQL中与疾病相关的症状中发现疾病?,mysql,sql,database,select,Mysql,Sql,Database,Select,这是我在这一页上的第一个问题,如果我在某些事情上不具体,或者我没有很好地解释我自己,很抱歉,而且英语不是我的母语,所以我可能会犯一些语法错误,所以我提前表示歉意 好的,我正在使用MySQL中的一个数据库,我在尝试获取查询并返回我想要的内容时遇到了问题,可能是因为我的知识不够 我有两张表,疾病和症状有多对多的关系,也就是说,一种疾病可以有一个或多个症状,反之亦然。这将导致生成另一个链接前两个的表,即(该表称为diseases_diagnosis): 表2.2.1.1.1.1.1诊断 好的,现在问题

这是我在这一页上的第一个问题,如果我在某些事情上不具体,或者我没有很好地解释我自己,很抱歉,而且英语不是我的母语,所以我可能会犯一些语法错误,所以我提前表示歉意

好的,我正在使用MySQL中的一个数据库,我在尝试获取查询并返回我想要的内容时遇到了问题,可能是因为我的知识不够

我有两张表,疾病和症状有多对多的关系,也就是说,一种疾病可以有一个或多个症状,反之亦然。这将导致生成另一个链接前两个的表,即(该表称为diseases_diagnosis):

表2.2.1.1.1.1.1诊断

好的,现在问题来了,我想使用与我通过的确切症状相对应的id_enfermedade(如果它有一个以上或一个以下的症状,它不应该返回该疾病),我的意思是,我只需要一个系统返回与我引入的确切症状相匹配的疾病。 这是我得到的真实表格:

问题是:如果我通过了症状2和6,它应该会返回:

但我希望它只是返回,如果确切的症状匹配,我的意思是,如果有另一种疾病具有相同的症状加上另一种症状,系统应该忽略它,例如:

如果我们通过:1,2,3,4,5,6,7,它应该返回6

但是如果我们通过了1,2,3,4,5,6,它应该返回null或空,因为没有具有这些确切症状的疾病

正如我前面提到的,我的SQL级别非常低,这使我无法接近


当我无法处理这一级别的事情时,我有点沮丧,所以我希望有人能帮助我。

通过查看您的表结构,不应该是这样的吗:

SELECT Top 1 id_enfermedade FROM disease_diagnosis WHERE id_sintoma IN (1, 2, 3);

它将返回“a”。

通过查看您的表结构,不应该是这样的吗:

SELECT Top 1 id_enfermedade FROM disease_diagnosis WHERE id_sintoma IN (1, 2, 3);

它将返回'a'。

一种方法是使用
分组方式
如下所示:

SELECT id_enfermedade
FROM disease_diagnosis 
GROUP BY symptom_ID
HAVING SUM( symptom_ID IN (1, 2, 3) ) = 3 AND
       SUM( symptom_ID NOT IN (1, 2, 3) ) = 0;
或者,您可以将具有的
表示为:

HAVING GROUP_CONCAT(id_enfermedade ORDER BY id_enfermedade) = '1,2,3'

这使得作为单个参数传入列表变得更容易。

一种方法是使用
分组方式和
如下所示:

SELECT id_enfermedade
FROM disease_diagnosis 
GROUP BY symptom_ID
HAVING SUM( symptom_ID IN (1, 2, 3) ) = 3 AND
       SUM( symptom_ID NOT IN (1, 2, 3) ) = 0;
或者,您可以将具有的
表示为:

HAVING GROUP_CONCAT(id_enfermedade ORDER BY id_enfermedade) = '1,2,3'

这使它更容易作为单个参数传入列表。

好的,这是我的错,我复制/粘贴了它,忘了适应这个问题。我粘贴的代码应该是这样的:
从疾病诊断中选择id\u sintoma
,其中id\u enfermedade='a';但它的意思是,我想要相反的结果,例如这样的结果:从疾病诊断中选择id_enfermedade,其中id_sintoma=1,id_sintoma=2,id_sintoma=3;它应该返回一个带有“a”的单行。但是它现在更像是我正在尝试的,但是我现在正在工作,这里没有它,一回到家我就会回答如果它解决了问题谢谢你的帮助虽然结果在技术上是正确的,但它不会解决问题。如果B列在表中A之前,B将被返回,而不是A。好的,这是我的错,我复制/粘贴了它,忘记适应这个问题。我粘贴的代码应该是这样的:
从疾病诊断中选择id\u sintoma
,其中id\u enfermedade='a';但它的意思是,我想要相反的结果,例如这样的结果:从疾病诊断中选择id_enfermedade,其中id_sintoma=1,id_sintoma=2,id_sintoma=3;它应该返回一个带有“a”的单行。但是它现在更像是我正在尝试的,但是我现在正在工作,这里没有它,一回到家我就会回答如果它解决了问题谢谢你的帮助虽然结果在技术上是正确的,但它不会解决问题。如果B在表中A之前列出,B将被返回,而不是A。谢谢Gordon,这似乎更接近我所寻找的,我现在无法测试它,我一回到家就会告诉你这是否解决了我的问题。非常感谢你的帮助!但是我想根据我所经历的症状来返回一种疾病,所以不应该是这样吗\n'从疾病诊断中选择id\u enfermedade…'如果我错了,请纠正我,但您的查询将返回症状,对吗?我在寻找一种疾病,ÁlexP。我似乎把列名倒过来了。@GordonLinoff Okey,现在它几乎完美了,它返回了正确的疾病,但在某些情况下,我会用真实的表格和数据编辑图像,这样你可以更好地检查它。@GordonLinoff Okey我编辑了这篇文章,所以现在你可以看到真实的表格和数据,很抱歉从一开始就没有发布,但我不能。如果我通过了5,7或2,6,你的代码会工作,但当我通过1,2,3,4,5,6,7时,它会毫无理由地返回空,在其他情况下,我也是这样做的:
从enfermedades\u Diagnostics GROUP中选择id\u enfermedade,通过id\u sintoma的和(id\u sintoma in(1,2,3,4,5,6,7))=7和(id\u sintoma NOT in(1,2,3,4,5,6,7))=0谢谢Gordon,这似乎更接近我想要的,我现在无法测试它,我一回到家就会告诉你这是否解决了我的问题。非常感谢你的帮助!但是我想根据我所经历的症状来返回一种疾病,所以不应该是这样吗\n'从疾病诊断中选择id\u enfermedade…'如果我错了,请纠正我,但您的查询将返回症状,对吗?我在寻找一种疾病,ÁlexP。我似乎把列名倒过来了。@GordonLinoff Okey,现在它几乎完美了,它返回了正确的疾病,但在某些情况下,我会用真实的表格和数据编辑图像,这样你可以更好地检查它。@GordonLinoff Okey我编辑了这篇文章,所以现在你可以看到真实的表格和数据,很抱歉从一开始就没有发布,但我不能。