0

我有两张桌子。例如: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
4

2 回答 2

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
于 2013-05-29T12:33:10.040 回答
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'; 
于 2013-05-29T12:33:44.280 回答