查询时如何防止复制某些属性

时间:2013-05-29 12:25:53

标签: sql

我有两张桌子。例如:Teacher(name, classCode)ClassSession(classCode, session, name)

,查询是:找到教授科目A的所有老师。

例如:

Teacher
peter 1
Mary 2

ClassSession
1 summer database
1 spring database
...

我这样查询:

select * from teacher,ClassSession
where Teacher.classCode = ClassSession.classCode

结果将是:

Peter 1 summer database
Peter 1 spring database

结果是重复的属性教师姓名,因为一个主题可以在多会话中教授。所以,我的问题是:我如何查询以避免这种重复。结果应该只是Peter名称。

Peter 1

2 个答案:

答案 0 :(得分:1)

试试这个:

select distinct tch.*
from teacher tch ,ClassSession cls
where Tch.classCode = Cls.classCode

但是,我建议如下:

使用正确的连接语法..

select distinct tch.*
from teacher tch 
join ClassSession cls on Tch.classCode = Cls.classCode

另外,不确定为什么需要连接两个表,因为您没有从ClassCode表中提取任何信息。如果您需要类名的第二个表,请执行以下操作:

select distinct tch.*,cls.Name
from teacher tch 
join ClassSession cls on Tch.classCode = Cls.classCode

答案 1 :(得分:1)

根据我的理解:

find all teacher that teaches subject A    

查询应该是这样的:

select * from teacher,ClassSession
where Teacher.classCode = ClassSession.classCode  
and ClassSession.classCode = 'A';

因为teacher.classCode匹配任何给定的classCode,所有原始查询都会返回。

现在,在删除重复的Peter条目方面会变得有点困难,所以你最想做的就是:

    select ClassSession.* from teacher,ClassSession
    where Teacher.classCode = ClassSession.classCode  
    and ClassSession.classCode = 'A'  
    and Teacher.name = 'Peter';  

现在这样做会停止查询teacher表,因为您已经知道您正在寻找谁,并且您将其作为where子句的一部分提供。

OP更新后

    select distinct teacher.* from teacher,ClassSession
    where Teacher.classCode = ClassSession.classCode  
    and ClassSession.classCode = 'A';