mysql - 我怎样才能从 MySQL 中与疾病相关的症状中发现疾病?

标签 mysql sql database select

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

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

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

表格疾病_诊断

好吧,现在问题来了,我想采用与我通过的确切症状相对应的 id_enfermedade (如果它有一个或多于一个症状,它不应该返回该疾病),我的意思是,我只是一个系统返回与我介绍的确切症状相匹配的疾病。 这是我得到的真实表格:

name of the table: enfermedades_diagnosticos

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

after passing id_sintoma 2 and 6

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

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

但是如果我们传递 1,2,3,4,5,6,它应该返回 null 或空,因为不存在具有这些确切症状的疾病

正如我上面已经提到的,我的 SQL 水平非常低,阻碍了我进一步接近。

当我无法应对这种级别的事情时,我感到有点沮丧,所以我希望有人可以帮助我。

最佳答案

一种方法是使用group byhaving,如下所示:

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'

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

关于mysql - 我怎样才能从 MySQL 中与疾病相关的症状中发现疾病?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50408846/

相关文章:

sql - PostgreSQL 11 - 使用格式分配给变量

mysql - SQL UNION 奇怪错误

database - 让 PostgreSQL BDR 在没有 super 用户(postgres 用户)权限的情况下工作?

MYSQL查询连胜包括比分

sql - MySQL 设计、查询、重复行

php - 关于 Iphone 和网络服务器通信的多个问题

php - 是否存在这样的 SQL 查询?

java - 如何根据类类型调用某些方法并返回某些对象

mysql - 根据 MySQL 查询中的输入/先前结果进行计算,而不使用 SET/SP

mysql - 加入 2 个 MySQL 表以列出所有帖子并查找特定用户关注的用户(登录的 INN 用户)