【发布时间】:2013-05-22 20:29:56
【问题描述】:
使用“AND”运算符获取查询以检索所需结果时遇到困难。需要在districtIDNum=5中显示完成了3门课程中任意一个的人的firstname、lastname、email和courseID,即(Health Old (courseIDNum=11) OR 健康新 (courseIDNum=12)) AND (PE 旧 (courseIDNum=68 OR PE 新 (courseIDNum=177)) AND courseIDNum=128。请注意11和12实际上是同一个课程:一个是旧课程,另一个是新课程(与68和177相同),因此,人在 DistrictIDNum=5 中只能取其中一个;这就是我尝试使用 (11, 12) 的原因。但是,它无法正常工作,因为它返回 0 行。
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 s.CourseIDNum IN (68, 177)
AND s.CourseIDNum=128
AND sc.DistrictIDNum = 5
AND r.Completed='Y'
group by p.PeopleID
having count(distinct s.CourseIDNum)=1
应该不返回的行是Liz M,来自完成courseIDNum=195的districtIDNum=12。手上,Esther B 来自districtIDNum=5 已完成courseIDs 11, 177 and 128;因此,她的数据应该显示所有 3 个 courseID。数据还应显示Tommy L 已完成courseIDs 12 and 68。
以下是示例表:
peopleID 名字 姓氏 电子邮件 schoolIDNum
1 以斯帖 B b@hotmail.com 33
2 汤米 L l@hotmail.com 55
3 Liz M m@hotmail.com 90
registrationID 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
课程ID 课程名称
11 健康(旧)
12 健康(新)
68 PE(旧)
128 键盘输入
177 PE(新)
195 计算
schoolID districtIDNum
33 5
55 5
90 12
【问题讨论】:
标签: sql sql-server-2008 tsql