有三个表
学生,课程和注册
Students has id, name columns
Courses has also course.id, course.name
并且第三个表加入了学生和课程表
Registration : stu_id, course_id
一名学生可以参加一门或多门课程。
我想找到仅在一门课程中注册的学生姓名。
答案 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;
这个效率更高。
您的架构不太可能包含空字段。因此,使用哪种内部或左边的连接并不重要。