0

我有以下sql结构

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

查找学生人数超过 10 人的所有部门

查找所有不在技术部门的学生

我怎么能用 join 来得到这个?

4

2 回答 2

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
于 2013-02-14T17:41:37.960 回答
0

首先,您需要将表连接在一起。部门到 Department_students,然后是 Student 到 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。

于 2013-02-14T17:36:59.513 回答