2013-02-14 97 views
0

我有以下SQL结构困惑加入

Department: id, name 
Students: id,name 
department_students: student_id, department_id 

找到所有的部门有超过10名学生

查找不在技术部门

我怎么能使用连接到所有学生得到这个?

+1

加入-视觉: http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html – Art 2013-02-14 17:44:01

回答

0

首先,您需要将表格连接在一起。部门到Department_students,然后学生到Department_Students。然后在你的WHERE子句中,进一步定义你需要找到的东西。这是“发现不是技术部门的所有学生”

SELECT S.ID, S.Name 
FROM department_students AS DS 
    INNER JOIN Department AS D 
     ON DS.department_id = D.id 
    INNER JOIN Students AS S 
     ON S.ID = DS.student_id 
WHERE 
    D.Name <> 'Tech_Department' 

注意一个例子:我使用的MS SQL Server语法。

所以,你需要明白的是,你正在'加入不同的表到其他表的'ON'字段有独特的信息(即键)。在你的例子中,遍历不同表的唯一信息是“ID”。部门ID为department_students,然后是学生ID至department_students。

+0

这不起作用。它找到所有学生的名字,那个学生不只是在科技部门。 – amarunowski 2013-02-14 17:43:20

0

比较遗憾的是可怕的压痕

select * 
from student s 
where 
    not exists 
    ( 
     select 1 
     from student_department sd 
     join department d 
     on sd.student_id = s.id 
     and 
     sd.department_id = d.id 
     and 
     d.name = 'tech' 
    ) 



select d.name 
from department d 
join student_department sd 
on d.id = sd.department_id 
group by sd.department_id 
having count(*)>10