2012-11-02 95 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