2

我正在尝试编写一条 SQL 语句来查找表中对于一个字段包含相同值的所有行。但是,我只想为单独的属性返回具有不同值的行。这有点难以解释。

我有一个带有架构的老师表:

TeacherName varchar(50)
CourseN     int
Quarter     varchar(50)

这三个字段组合起来构成了主键,因此只要季度不同,同一位老师就可以教授同一门课程。我要解决的问题是,如何返回至少教授两门不同课程(不分季度)的所有教师的(不同)姓名?

这是一个实验室,我已经尝试解决这个问题大约一个星期,但我无法弄清楚,所以我想我会来这里。上一个问题要求找出至少两次教授同一课程的教师的不同姓名列表。我想出了这个:

SELECT DISTINCT [TeacherName] 
FROM            [Teacher]
GROUP BY        [TeacherName], 
                [CourseN] 
HAVING   COUNT( [CourseN] ) >= 2

然而,我现在试图解决的问题是相似的,但同样,我只需要不止一次出现在表格中并教授至少两门不同课程的老师。我也非常感谢一些指导,而不仅仅是答案,因为我准确了解数据库在做什么很重要。

4

1 回答 1

3

在这种情况下,您应该能够获得不同的列表,而不必使用 DISTINCT 这个词,特别是如果它可以“不分季度”。本质上,您只需要在子查询表中有 >=2 行的教师,每个唯一的教师-课程编号组合有 1 行。

select TeacherName
from (
    select TeacherName, CourseN
    from Teacher
    group by TeacherName, CourseN
    ) t1
group by TeacherName
having count(*) >=2
于 2012-04-17T04:07:08.987 回答