SQL查询在一门课程中查找学生

时间:2014-04-29 06:37:24

标签: mysql sql

有三个表

学生,课程和注册

  Students has id, name columns

  Courses has also course.id, course.name

并且第三个表加入了学生和课程表

Registration : stu_id, course_id 

一名学生可以参加一门或多门课程。

我想找到仅在一门课程中注册的学生姓名。

3 个答案:

答案 0 :(得分:5)

尝试使用INNER JOIN

SELECT S.id, S.name
FROM students S
INNER JOIN registration R ON S.id = R.stu_id
GROUP BY S.id, S.name
HAVING COUNT(*) = 1

答案 1 :(得分:2)

如下所示:

SELECT s.id, s.name
FROM students s
LEFT JOIN registration r ON s.id = r.stu_id
GROUP BY s.id, s.name
HAVING COUNT(r.course_id) = 1

答案 2 :(得分:1)

select s.*
from (
    select r.stu_id stu_id
    from Registration r
    group by r.stu_id
    having count(*) == 1) ra
join Students s on s.id = ra.stu_id;

这个效率更高。

您的架构不太可能包含空字段。因此,使用哪种内部或左边的连接并不重要。