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
答案 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';