SQL:查找不同记录中的公共行

时间:2017-12-14 15:14:32

标签: sql

我有3张桌子:

  • 教师表(t_id,电子邮件,......)
  • 学生表(s_id,电子邮件,......)
  • 教学表(t_id,s_id,class_time,...)

我有一个任务,给定两个t_id,找到这两位老师教过的普通学生。

是否可以在严格的SQL中完成此操作?如果不是,我可能会尝试根据不同的老师单独检索学生记录,并搜索以查看他们共有的学生。对于似乎可以为。编写SQL查询的东西来说,这似乎有点过分。

2 个答案:

答案 0 :(得分:2)

你可以自我加入为两位老师招收学生。

{{1}}

答案 1 :(得分:1)

select s_id 
from student a
inner join teaching b on a.s_id = b.s_id
where t_id = 'First give t_id'
INTERSECT 
select s_id 
from student a
inner join teaching b on a.s_id = b.s_id
where t_id = 'Second give t_id'

这与MS DB有关,但可能与其他人无关。

select s_id 
from student a
inner join teaching b on a.s_id = b.s_id
where b.t_id = 'First give t_id'
and s_id in (
select s_id 
from student c
inner join teaching d on c.s_id = d.s_id
where d.t_id = 'Second give t_id'
)

第二个应该适用于任何数据库。