首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL SELECT (多-2-多)

SQL SELECT (多-2-多)
EN

Stack Overflow用户
提问于 2016-10-08 05:04:14
回答 1查看 48关注 0票数 0

我试着浏览之前问过的问题,但是问题太多了。希望这不是一个复制,我是一个新的SQL,所以仍然试图包围我的头!顺便说一下,我在用MySQL。

我有两张桌子:

代码语言:javascript
运行
AI代码解释
复制
Sickness 
id: 1, name: flu
id: 2, name: migraine

Symptom
id: 1, name: cough
id: 2, name: headache

和中间表,例如:

代码语言:javascript
运行
AI代码解释
复制
Sickness2Symptom 
sickness_id: 1, symptom_id: 1
sickness_id: 1, symptom_id: 2
sickness_id: 2, symptom_id: 2

我想要一个查询,列出与特定症状无关的所有疾病。

所以,如果我们回顾所有症状和疾病之间的关系。假设症状是id=1 (cough)。该查询如下所示:

代码语言:javascript
运行
AI代码解释
复制
     SELECT sickness.*
     FROM sickness
     JOIN sickness2symptom
     ON sickness2symptom.sickness_id = sickness.id
     JOIN symptom
     ON symptom.id = sickness2symptom.symptom_id
     WHERE symptom.id = 1";

因此,这将返回"flu"

但是我如何查询与id 1症状无关的所有疾病,在这种情况下,查询的结果将是"migraine"

如果我只将WHERE子句更改为!=1,显然是不正确的。

谢谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-08 05:07:06

以下是一种方法:

代码语言:javascript
运行
AI代码解释
复制
select s.*
from sickness s
where not exists (select 1
                  from Sickness2Symptom s2s
                  where s2s.sickness_id = s.id and s2s.symptom_id = 1
                 );

请注意,您实际上不需要symptom表,因为您需要的信息在Sickness2Symptom中。

另外,not exists查询也可以表示为NOT IN

代码语言:javascript
运行
AI代码解释
复制
where s.id NOT IN (select s2s.sickness_id
                   from Sickness2Symptom s2s
                   where s2s.symptom_id = 1
                  );

或者是带有LEFT JOIN子句的WHERE

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39932698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档