「 AND」演算子を使用して目的の結果を取得するためのクエリを取得するのが難しい。firstname、lastname、email、およびcourseIDでdistrictIDNum=53 つのコースのいずれかを完了した人を表示する必要があります。つまり、 (Health Old (courseIDNum=11)  OR  Health New (courseIDNum=12)) AND (PE Old (courseIDNum=68  OR  PE New (courseIDNum )) =177)) AND courseIDNum=128 .11と12は実際には同じコースであることに注意してください: 1 つは古いコースで、もう 1 つは新しいコースです ( and と同じ68) 177。というわけで(11,12)を使ってみたのですが、0行を返すのでうまくいきません。
SELECT max(p.FirstName),
       max(p.LastName),
       max(p.Email),
       max(s.CourseIDNum)
FROM People p
INNER JOIN Registration r
   on p.PeopleID = r.PeopleIdNum
INNER JOIN Section s
   on r.SectionIDNum = s.SectionID
INNER JOIN School sc
   on p.SchoolIDNum = sc.SchoolID
WHERE s.CourseIDNum IN (11, 12)
  AND s.CourseIDNum IN (68, 177)
  AND s.CourseIDNum=128
  AND sc.DistrictIDNum = 5
  AND r.Completed='Y'
group by p.PeopleID
having count(distinct s.CourseIDNum)=1
返されるべきではないLiz M行は、districtIDNum=12誰が完了したかcourseIDNum=195です。一方、Esther BfromdistrictIDNum=5は完了しましcourseIDs 11, 177 and 128た。したがって、彼女のデータには 3 つの courseID がすべて表示されるはずです。Tommy Lデータには、が完了したことも示されますcourseIDs 12 and 68。
サンプル テーブルは次のとおりです。
peopleID FirstName LastName Email schoolIDNum 
1 Esther B b@hotmail.com 33 
2 Tommy L l@hotmail.com 55 
3 Liz M m@hotmail.com 90
登録ID peopleIDNum sectionIDNum 
22 1 40 
23 2 41 
24 3 132 
25 1 78 
26 2 52 
27 1 63
sectionID courseIDNum 
40 11 
41 12 
52 68 
63 128 
78 177 
132 195
courseID coursename 
11 Health (旧) 
12 Health (新) 
68 PE (旧) 
128 Keyboarding 
177 PE (新) 
195 Computing
学校ID 学区IDNum 
33 5 
55 5 
90 12