0

假设我想查找某个地区 (districtID=5) 中的人是否参加过课程 A (cID=11 或 cID=12) 但不是两者都有,因为他们的课程名称相同但cID 不同,你怎么写这在 SQL 中,连同他们的 FirstName、LastName 和 Email?你能帮忙吗?以下是字段:

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

注册ID1 人IDNum sectionIDNum
22 1 40
23 2 40

sectionID courseIDNum 地区IDNum
40 11 5
41 12 5

schoolID 地区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)

但是如果你查看数据,join 不能同时拥有两个课程,因为这 2 个人的 SecionID 将始终为 40

于 2013-05-20T16:04:58.663 回答