组合两个SQL Select语句

时间:2020-08-11 20:23:18

标签: sql

我具有基本的SQL知识,并且尝试编写以下问题的SQL语句:

Q:列出所有具有麻疹免疫力的学生[在此处输入图像描述] [1],但对水痘有宗教豁免。

我所拥有的:
宗教豁免

dragend

患有麻疹疫苗的人

clientY

我不确定如何将两者结合以获得单个结果。

附加的是数据库的逻辑模型。
[1]:https://i.stack.imgur.com/UQGqC.png

5 个答案:

答案 0 :(得分:0)

如果要将代码保留在上面,则可以扩展JOIN和WHERE条件

SELECT DISTINCT(P.personID)
FROM Person P
INNER JOIN Waiver ON Person.personID = Waiver.personID
INNER JOIN WavierDisease On Waiver.waiverID = WaiverDisease.waiverID
INNER JOIN Disease ON WaiverDisease.diseaseID = Disease.diseaseID
INNER JOIN Immunity ON Person.personID = Immunity.personID -- add this
WHERE
Disease.diseaseName = ‘Chickenpox’
AND Waiver.exemptCode = ‘Religious’
AND Immunity.diseaseId IN ( -- add this
   SELECT diseaseId FROM Disease WHERE Disease.diseaseName = 'Measles'
)

答案 1 :(得分:0)

要有效回答问题,

Q:列出所有具有麻疹免疫力但对水痘有宗教豁免的学生。

您需要查询两个条件:1)麻疹免疫力和2)水痘(或水痘)的宗教豁免。

因此,考虑将JOIN添加为另一个Disease,并第二次联接到SELECT P.* FROM Person p INNER JOIN Waiver w --- WAIVER CHECK ON w.personID AND p.personID AND w.exemptCode = 'Religious' INNER JOIN WavierDisease wd ON wd.waiverID = w.waiverID INNER JOIN Disease d1 ON d1.diseaseID = wd.diseaseID AND d1.diseaseName = 'Chickenpox' INNER JOIN Immunity i --- IMMUNITY CHECK ON i.personID AND p.personID INNER JOIN Disease d2 ON d2.diseaseID = i.diseaseID AND d2.diseaseName = 'Measles' 表中:

make_token

答案 2 :(得分:0)

列出所有拥有...的学生

  1. “列出所有学生”是指从“学生”表中选择。 (我猜您的桌子是“人”吗?或者也许只有那个桌子中的某些人?)
  2. “具有...”的意思是WHERE ...。而且,由于该信息位于其他表中,因此您需要EXISTSIN

如果我正确理解了您的数据模型,这将为我们带来帮助:

select *
from person
where personid in 
(
  select personid
  from immunity
  where diseaseid = (select diseaseid from disease where diseaseName = 'Measles')
)
and personid in
(
  select personid
  from waiver
  where exemptCode = 'Religious'
  and waiverid in 
  (
    select waiverid
    from waiverdisease 
    where diseaseid = (select diseaseid from disease where diseaseName = 'Chickenpox')
  )
);

我认为这是可读的。而且由于使用IN而不是联接,因此我们确保不要在查找中得到任何重复项。

答案 3 :(得分:-1)

您可以使用union

SELECT *
FROM Person P
INNER JOIN Waiver ON Person.personID = Waiver.personID
INNER JOIN WavierDisease On Waiver.waiverID = WaiverDisease.waiverID
INNER JOIN Disease ON WaiverDisease.diseaseID = Disease.diseaseID
WHERE Disease.diseaseName = ‘Chickenpox’
AND Waiver.exemptCode = ‘Religious’
union
SELECT *
FROM Immunity I
INNER JOIN Disease ON I.diseaseID = Disease.diseaseID
WHERE Disease.diseaseName = 'Measles';

答案 4 :(得分:-1)

我让它起作用。感谢您的快速帮助。

SELECT Immunity.personID
FROM Immunity
INNER JOIN Disease ON Immunity.diseaseID = Disease.diseaseID
WHERE Disease.diseaseName = 'Measles'
UNION
SELECT Person.personID
FROM Person
INNER JOIN Waiver ON Person.personID = Waiver.personID
INNER JOIN WaiverDisease On Waiver.waiverID = WaiverDisease.waiverID
INNER JOIN Disease ON WaiverDisease.disease = Disease.diseaseID
WHERE Disease.diseaseName = 'Chickenpox'
AND Waiver.exemptTypeCode = 'Religious';
相关问题