-6

私はシニアプロジェクトに取り組んでいます。オンライン登録システムとウェブサイトのミニ版。仮定では、教師が 1 学期に教えられるクラスの数を 3 に制限したいと考えています。

  • TblEmployee内容: emp_ID(キー)、can_Teach(トピックの最初の 4 文字)。
  • TblCourse内容: course_ID(キー)、course_Type(トピックの最初の 4 文字)。
  • TblClass内容: ClassID(キー)、emp_ID(FK)、course_ID(FK) セメスター (期間)

これまでのところ、そのクラスを教える適切な教師を選択する際に、これはうまく機能します。

SELECT * 
FROM tblEmployee, tblCourse  
WHERE tblEmployee.canTeach = tblCourse.course_Type 
  AND tblClass.course_ID = ?

tblClassただし、 if emp_ID (COUNT)< 3 からそれらを含め、3 以上のものを除外するように追加したいと思います (つまり、ドロップダウン リストに表示されません)。

これを試しましたが、うまくいきませんでした。

SELECT * 
FROM tblEmployee, tblCourse 
WHERE tblEmployee.canTeach = tblCourse.course_Type 
  AND tblClass.course_ID = ? 
INNER JOIN (SELECT
                tblEmployee.emp_ID, tblClass.emp_ID 
            FROM 
                tblEmployee, tblClass 
            GROUP BY 
                tblClass.emp_ID 
            HAVING 
                count(*) < 3 AND tblClass.emp_ID = tblEmployee.emp_ID) 
  and semester = ?

どんな助けでも大歓迎です。

4

1 に答える 1

0

サブクエリから始めて、スリム化し、構文の一貫性を保ちます。

   SELECT
   tblClass.emp_ID 
   FROM 
   tblClass 
   where semester = ?
   GROUP BY
   tblClass.emp_ID 
   HAVING count(tblClass.emp_ID) < 3

私が理解しているように、それは表に 3 回未満の ID (3 未満のコースを教えている教師) です。

外側のクエリでは、その基準を満たすが内側のセットにも含まれる従業員が必要です。繰り返しますが、構文に一貫性を持たせてください。次に、IN を試します。

SELECT * 
FROM tblEmployee inner join tblCourse 
on tblEmployee.canTeach = tblCourse.course_Type 
where tblClass.course_ID = ?
and tblEmployee.emp_id 
in 
{
   SELECT
   tblClass.emp_ID 
   FROM 
   tblClass 
   where semester = ?
   GROUP BY
   tblClass.emp_ID 
   HAVING count(tblClass.emp_ID) < 3
}

それが何をするか見てください。

于 2013-05-31T21:53:37.720 に答える