2012-11-02 140 views
0

我目前在MySQL數據庫中有5個表。他們中的一些人共享外鍵並且彼此相互依賴。我試圖創建一個查詢,並排顯示所有結果(majorcoursesemester等)。我創建的查詢不顯示我想要的結果,因爲我沒有添加其他表。我不知道如何實現其他表。我如何修改mysql-query來按順序顯示所有結果?SQL查詢多表(涉及外鍵)

查詢

select * from course left join major on course.id = majors.id left join majors on courses_major_xref.majors_id = majors.id 
+0

你的查詢沒有按」 t匹配圖像中的結構。哪個是對的? –

+0

@ G-Nugget對不起,我做了一些修改,但圖像是正確的 – techAddict82

+0

您可能想標準化ID列的名稱;這將使寫'JOIN's更容易。而不是寫'SELECT * FROM table1 JOIN table2 ON(table1.id = table2.table1_id)',你可以直接寫'SELECT * FROM table1 JOIN table2 USING(table1_id)'。具有多個連接的長查詢比這更容易編寫。 –

回答

1

請嘗試以下

SELECT * FROM course 
INNER JOIN major_courses_xref ON course.id = major_courses_xref.course_id 
INNER join majors ON major_courses_xref.majors_id = majors.id 
INNER JOIN courses_semester_xref ON course.id = courses_semester_xref.course_id 
INNER JOIN semester ON courses_semester_xref.semester_id = semester.id; 
+0

通過使用內部連接,你會錯過沒有鏈接到學期和專業的課程,如果這就是你想要的OP,但是通過他/她的查詢例子來判斷,我猜所有課程都是需要的,其他信息是否可用。 – invertedSpear

+0

他只會收到已經拍攝的課程信息。如果OP需要所有信息,他可以將內部連接更改爲「左連接」。 thx – Anam

+0

好的,我現在明白'Inner'和'Left'之間的區別。你的答案具體如我所問,但一個額外的修改:我怎樣才能從顯示結果'course_id' major_id'semester_id'中省略? – techAddict82

1

我認爲只是在查詢操作問題的一些訂單,嘗試:

SELECT * from course 
LEFT JOIN major_course_xref 
ON course.id = major_course_xref.courseID 
LEFT JOIN major 
ON major.id = major_course_xref.major_id 
LEFT JOIN course_semester_xref 
ON course.id = course_semester_xref.course_id 
LEFT JOIN semester 
ON course_semester_xref.semester_id = semester.id