如何使用“OR”运算符检索数据

时间:2013-05-20 15:58:15

标签: sql-server-2008 asp-classic

如果我想查找某个区(区号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'

1 个答案:

答案 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,