0

特定の地区 (districtID=5) の人々がコース A (cID=11 または cID=12)を受講したかどうかを調べたいとしますが、同じコース名で cID が異なるため、両方ではありません。 FirstName、LastName、および Email と一緒に SQL でこれを実行しますか? 親切に助けてもらえますか?フィールドは次のとおりです。

peopleID FirstName LastName Email schoolIDNum
1 Esther B b@hotmail.com 33
2 Tommy L l@hotmail.com 55

registrationID1 peopleIDNum sectionIDNum
22 1 40
23 2 40

sectionID コースIDNum 地区IDNum
40 11 5
41 12 5

学校ID 学区IDNum
33 5
55 5

以下の私のコードは機能しませんでした。それは私に0行を与え続けます。

SELECT p.FirstName, p.LastName, p.Email, s.CourseIDNum
  FROM People p, Registration r, Section s, School sc
 WHERE p.PeopleID=r.PeopleIDNum AND r.SectionIDNum=s.SectionID AND
       (s.CourseIDNum=11 OR s.CourseIDNum=12) AND sc.SchoolID=p.SchoolIDNum AND
       s.DistrictIDNum=5 AND r.Completed='Y'
4

1 に答える 1

1

可能であれば、古いスタイルの結合を避けようとします。そのようにして、where 句には実際の句のみが含まれ、結合と句が混在することはありません。

SELECT p.FirstName, p.LastName, p.Email, 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=11 AND s.CourseIDNum!=12)
  OR (s.CourseIDNum!=11 AND s.CourseIDNum=12)

しかし、データを見ると、これら 2 人のセクション ID は常に 40 であるため、結合に両方のコースを含めることはできません。

于 2013-05-20T16:04:58.663 に答える