我有两个表:Students (id, fname, lname)
和Registrar (id, student_id, class_id)
。我教了一个班级ID为99的班级。我想找到班上的所有学生,并列出那些学生以及他们正在学习的所有其他班级。我可以做到以下几点:
SELECT s.fname, s.lname, r.class_id FROM
Students AS s JOIN Registrar AS r ON s.id = r.student_id WHERE
r.student_id IN
(SELECT student_id FROM Registrar WHERE class_id = 99);
这很有效,但速度很慢。我没有太多的经验(正如我的标题所示,我不知道这是什么),但我猜这是一个相当常见的问题需要解决。任何正确方向的指针都是最受欢迎的。
答案 0 :(得分:1)
您还可以加入条款中的多个项目:
SELECT s.fname, s.lname, r.class_id
FROM Registrar r
INNER JOIN
(SELECT student_id
FROM Registrar
WHERE class_id = 99) as t
ON r.student_id = t.student_id
INNER JOIN Students s
ON r.student_id = s.id
你真的想尝试尽可能多地完成你的连接。
〜干杯