select instructor.name, instructor.id
from instructor,teaches,course
where instructor.id = teaches.ID and course.course_id = teaches.course_id
and instructor.dept_name = course.Dept_name
group by instructor.name
我是sql和嵌套查询的新手。我正在努力找到教师的姓名和身份证,他在自己的部门教授每门课程。
这是我到目前为止所拥有的。我想用group by来计算他们教的课程,并与该部门下的所有课程进行比较。但我坚持到这里,它说SQL错误:ORA-00979:不是GROUP BY表达式
我不知道如何处理这个问题。
teaches(ID, course id, sec id, semester, year)
course(course id, title, dept name, credits)
instructor(ID, name, dept name, salary)
我对聚合函数很困惑,如何通过表达式来表示有效的组。谁能帮我?
答案 0 :(得分:1)
假设我正确理解你的数据库,这是另一种方法:
select i.id, i.deptname
from instructor i
join teaches t on i.id = t.id
group by i.id, i.deptname
having count(*) = (
select count(*)
from course c
where c.deptname = i.deptname)
这使用更标准的join
语法以及aggregation
来检查教师教授的count
课程与该特定部门的整体count
相比较。< / p>
顺便说一句,您可能需要使用count(distinct courseid)
- 取决于您的数据以及是否有重复数据。
答案 1 :(得分:0)
当你说每个时,我认为你的意思是所有部门的课程。试试这个:
SELECT instructor.name, instructor.id
FROM instructor
WHERE 0 = (CASE WHEN
((SELECT COUNT(DISTINCT teaches.course_id)
FROM teaches
WHERE teaches.ID = instructor.id) =
(SELECT COUNT(DISTINCT course.course_id)
FROM course
WHERE course.Dept_name = instructor.dept_name)) THEN 0 ELSE 1 END);