如果我想查找某个区(区号ID = 5)中的人是否已经参加了课程A(cID = 11或cID = 12)但是而不是两者,因为他们有<具有不同cID的strong>相同的课程名称,您如何在SQL中编写它,以及它们的FirstName,LastName和Email?你能帮忙吗?以下是字段:
的peopleid名姓电子邮件schoolIDNum
1埃丝特乙b@hotmail.com 33
2托米大号l@hotmail.com 55
registrationID1 peopleIDNum sectionIDNum
22 1 40 23
2 40
sectionID courseIDNum districtIDNum
40个11 5
41 12 5
schoolID districtIDNum
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'
答案 0 :(得分: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)
但是如果你查看数据,那么加入就不能同时拥有这两个课程,因为这两个人的SecionID总是40,