SQL SELECT(多2个)

时间:2016-10-08 13:04:14

标签: mysql sql

我试图浏览以前问过的问题,但是有很多问题。希望这不是重复我是SQL的新手,所以仍然试图绕过这个!顺便说一下,我正在使用MySQL。

所以我有两张桌子:

Sickness 
id: 1, name: flu
id: 2, name: migraine

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

和中间表例如:

Sickness2Symptom 
sickness_id: 1, symptom_id: 1
sickness_id: 1, symptom_id: 2
sickness_id: 2, symptom_id: 2

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

因此,如果我们考虑检索症状和疾病之间所有创建的关系。假设症状有id=1 (cough)。该查询看起来像:

     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,则显然不正确。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

这是一种方法:

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

where s.id NOT IN (select s2s.sickness_id
                   from Sickness2Symptom s2s
                   where s2s.symptom_id = 1
                  );

LEFT JOIN带有WHERE子句。