我有以下SQL結構困惑加入
Department: id, name
Students: id,name
department_students: student_id, department_id
找到所有的部門有超過10名學生
查找不在技術部門
我怎麼能使用連接到所有學生得到這個?
我有以下SQL結構困惑加入
Department: id, name
Students: id,name
department_students: student_id, department_id
找到所有的部門有超過10名學生
查找不在技術部門
我怎麼能使用連接到所有學生得到這個?
首先,您需要將表格連接在一起。部門到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。
這不起作用。它找到所有學生的名字,那個學生不只是在科技部門。 – amarunowski 2013-02-14 17:43:20
比較遺憾的是可怕的壓痕
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
加入-視覺: http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html – Art 2013-02-14 17:44:01