SQL返回一个字段包含相同数据但其他字段包含不同数据的行

Posted

技术标签:

【中文标题】SQL返回一个字段包含相同数据但其他字段包含不同数据的行【英文标题】:SQL to return rows that which contain same data for one field but different data for others 【发布时间】:2012-04-17 03:47:48 【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

您需要哪些方面的帮助/指导? 弄清楚如何编写我需要的 SQL。在尝试解决这个问题时,我经历了许多思考过程。我想我首先需要一种方法来区分出现两次相同课程的老师和出现两次不同课程的老师。我在这里写了一个这样的查询:“select distinct teachername, coursen from teacher order by teachername”。这结合了教授同一门课程的教师,我认为这是一个很好的起点。但是现在我完全不知道如何将其用作子查询来仅返回那些教师。 【参考方案1】:

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

select TeacherName
from (
    select TeacherName, CourseN
    from Teacher
    group by TeacherName, CourseN
    ) t1
group by TeacherName
having count(*) >=2

【讨论】:

是的,这正是我想要的,谢谢。我知道我的思维过程是正确的,将教授多门(不同)课程的教师与教授同一门课程两次的教师区分开来,然后从那里提取教师的名字。我只是无法为我的生活找出正确的形式/语法。再次感谢! (事实上​​我已经尝试过几乎完全相同的事情,我没有意识到我需要为该子查询指定一个标签!)

以上是关于SQL返回一个字段包含相同数据但其他字段包含不同数据的行的主要内容,如果未能解决你的问题,请参考以下文章

SQL - 计算包含两个不同字段的行数

sql语句要select某字段不重复的数据应该如何写?

我在数据库中建了两个字段完全相同的表

加入相同的字段,不同的数据类型

sql 显示重复记录数

在sql语句中怎么判断一个字段是不是包含在另一个字符串中