我正在研究我的高级项目。迷你版的在线注册系统和网站。在假设中,我们希望限制教师在一学期内教授的课程数量为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)
< 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}}
任何帮助都将不胜感激。
答案 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
}
看看它的作用。