0

「 AND」演算子を使用して目的の結果を取得するためのクエリを取得するのが難しい。firstnamelastnameemail、およびcourseIDdistrictIDNum=53 つのコースのいずれかを完了した人を表示する必要があります。つまり、 (Health Old (courseIDNum=11) OR Health New (courseIDNum=12)) AND (PE Old (courseIDNum=68 OR PE New (courseIDNum )) =177)) AND courseIDNum=128 .1112は実際には同じコースであることに注意してください: 1 つは古いコースで、もう 1 つは新しいコースです ( and と同じ68) 177。というわけで(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行は、districtIDNum=12誰が完了したかcourseIDNum=195です。一方、Esther BfromdistrictIDNum=5は完了しましcourseIDs 11, 177 and 128た。したがって、彼女のデータには 3 つの courseID がすべて表示されるはずです。Tommy Lデータには、が完了したことも示されますcourseIDs 12 and 68

サンプル テーブルは次のとおりです。

peopleID FirstName LastName Email schoolIDNum
1 Esther B b@hotmail.com 33
2 Tommy L l@hotmail.com 55
3 Liz M m@hotmail.com 90

登録ID 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

courseID coursename
11 Health (旧)
12 Health (新)
68 PE (旧)
128 Keyboarding
177 PE (新)
195 Computing

学校ID 学区IDNum
33 5
55 5
90 12

4

2 に答える 2

1

クエリ条件の指定方法

 s.CourseIDNum IN (11, 12)
 AND s.CourseIDNum IN (68, 177)
 AND s.CourseIDNum=128

CourseIDNum は、同時に一連の整数に等しくなければならないことを意味します。

SELECT p.FirstName,
       p.LastName,
       p.Email
FROM People p
WHERE p.PeopleID IN
(
    SELECT r.PeopleIdNum
    FROM Registration r
    INNER JOIN Section s
       on r.SectionIDNum = s.SectionID
    INNER JOIN School sc
       on p.SchoolIDNum = sc.SchoolID
    WHERE s.CourseIDNum IN (11, 12, 68, 177, 128)
      AND sc.DistrictIDNum = 5
      AND r.Completed='Y'
)

人のリストを取得したら、ここまたはここに示すようにセクション レコードを連結して CourseID を取得します。

于 2013-05-23T05:40:09.403 に答える
0
WHERE s.CourseIDNum IN (11, 12)
  AND s.CourseIDNum IN (68, 177)
  AND s.CourseIDNum=128

この部分は、このようなクエリを書いていることを意味します

WHERE s.CourseIDNum IN (11,12,68,177) and courseIDNum = 128

これは、あるケースでは CourseID num が 11 、 12 、 68 、 177 と等しくなる可能性があることを意味し、同時に 128 と等しくなる必要があります....これは不可能です。よくわかりませんが、likeを使ってみてください

WHERE (s.CourseIDNum IN (11, 12,68,177)
  OR s.CourseIDNum=128)
于 2013-05-23T05:27:16.477 に答える