0

ここで私の問題を説明するために最善を尽くします。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の結果はありません。次に、ORAND演算子に置き換えたところ、0 行が返されました。これでどんな助けでも大歓迎です!1168128

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

4

0 に答える 0