2013-01-11 66 views
3

如何使用连接完成查询。我是数据库中的新成员。此查询工作正常.. 但我想使它更rubust使用连接优化查询

$query = "SELECT student_id 
FROM students 
WHERE student_id 
IN (
    SELECT student_id 
    FROM class_students 
    WHERE class_id 
     IN (
      SELECT class_id 
      FROM class_course 
      WHERE teacher_id =". $_SESSION['teacher_id']."))"; 

有任何其它的方式来做到这一点

+0

是的。见JOINs。这就是他们的目的。 – Strawberry

+0

这是一个关于['joins'](http://www.w3schools.com/sql/sql_join.asp)和[可视化表示](http://www.codeproject.com/Articles/33052/)的simport教程。视觉表示的-SQL联接) – bonCodigo

回答

5

使用IN可以转换为正确联接:

SELECT s.student_id 
FROM students s 
JOIN class_students cs ON cs.student_id = s.student_id 
JOIN class_course c ON c.class_id = cs.class_id 
WHERE teacher_id = ? 

请注意,我已经删除了(不相关的)应用程序语言细节(perl?),只留下了回答问题的SQL。

1
$query = "select students.student_id 
from class_course left outer join class_students on 
     class_course.class_id = class_students.class_id 
    left outer join students on 
     class_students.student_id = students.student_id 
where class_course.teacher_id = ". $_SESSION['teacher_id'] 
1
$query = "SELECT s.student_id 
FROM students s 
    INNER JOIN class_students cs 
     ON s.student_id = cs.student_id 
    INNER JOIN class_course cc 
     ON cs.class_id = cc.class_id 
      AND cc.teacher_id =". $_SESSION['teacher_id']."))