查询 - 限制教师可以教授的课程数量

时间:2013-05-31 20:41:22

标签: sql

我正在研究我的高级项目。迷你版的在线注册系统和网站。在假设中,我们希望限制教师在一学期内教授的课程数量为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 emp_ID (COUNT)&lt; 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 = ? 添加它。 3包括那些并排除大于或等于3的那些(即它们不会出现在下拉列表中。

我尝试了这个,但它没有用。

{{1}}

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分: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
}

看看它的作用。