ここで私の問題を説明するために最善を尽くします。courseIDNum=11
私は、 または のいずれかcourseIDNum=12
を修了した人をチェックするのに適したクエリを実行しましたdistrictIDNum=5
が、両方の courseIDNums は完了していません。スクリプトは次のとおりです。
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 sc.DistrictIDNum = 5
AND r.Completed='Y'
group by p.PeopleID
having count(distinct s.CourseIDNum)=1
今度は、参加者のデータを再度取得する必要がありますdistrictIDNum=5
が、今回は、3 つのコースすべてを受講したかどうかを確認します。3 つのコースのうち 2 つが同じコース名ですが、これら 2 つのコースのそれぞれに 2 つの異なる courseIDNums があります。WHERE
というわけで、以下の部分を編集しました。返された結果は、と を完了12
した人のみです。 と177
の結果はありません。次に、ORをAND演算子に置き換えたところ、0 行が返されました。これでどんな助けでも大歓迎です!11
68
128
WHERE s.CourseIDNum IN (11, 12)
OR s.CourseIDNum IN (68, 177)
OR s.CourseIDNum=128
AND sc.DistrictIDNum = 5
AND r.Completed='Y'
group by p.PeopleID
having count(distinct s.CourseIDNum)=3
関連するテーブルは次のとおりです。
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