我有以下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