-6

我正在做我的高级项目。在线注册系统和网站的迷你版。在假设中,我们希望将教师在一个学期中可以教授的课程数量限制为 3 个。

  • TblEmployee包含:emp_ID(key),can_Teach(主题的前 4 个字母)。
  • TblCourse包含:(course_ID键),course_Type(主题的前 4 个字母)。
  • TblClass包含:ClassID(Key)、emp_ID(FK)、course_ID(FK)学期(时间段)

到目前为止,这在选择教授该课程的合适老师方面效果很好:

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

但是我想补充一点,从tblClassif 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 回答