2013-01-11 67 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']."))