2013-02-14 53 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