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

ebdffaop  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(349)

这是我在这一页上的第一个问题,如果我在一些事情上不具体或我没有完全解释好自己,对不起,而且英语不是我的母语,所以我可能会犯一些语法错误,所以我很抱歉提前。
好的,我在mysql中使用一个数据库,我在尝试获取一个查询并返回我想要的东西时遇到了问题,可能是因为我的知识不够。。。
好吧,我有两个表,疾病和症状有一个多对多的关系,也就是说,一种疾病可以有一个或多个症状,反之亦然。这将导致生成另一个链接前两个的表,即(该表称为diseases\u diagnosis):
表1-1诊断
好的,现在问题来了,我想使用与我通过的确切症状相对应的id\u enfermedade(如果它有一个以上或一个以下的症状,它不应该返回该疾病),我的意思是,我只是一个系统返回与我介绍的确切症状相匹配的疾病。这是我拿到的真正的table:

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

但我希望它只是返回,如果确切的症状匹配,我的意思是,如果有另一种疾病有相同的症状加上另一个,系统应该忽略它,例如:
如果我们通过:1,2,3,4,5,6,7它应该返回6
但是如果我们通过1,2,3,4,5,6,它应该返回null或空,因为没有疾病具有这些确切的症状
正如我前面提到的,我的sql级别非常低,无法接近。
当我不能应付这种水平的事情时,我有点沮丧,所以我希望有人能帮助我。

bogh5gae

bogh5gae1#

一种方法是使用 group by 以及 having 这样地:

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 作为:

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

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

chhqkbe1

chhqkbe12#

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

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

它将返回“a”。

相关问题