「 AND」演算子を使用して目的の結果を取得するためのクエリを取得するのが難しい。firstname
、lastname
、email
、およびcourseID
でdistrictIDNum=5
3 つのコースのいずれかを完了した人を表示する必要があります。つまり、 (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 B
fromdistrictIDNum=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