难以理解SQL Join查询

时间:2015-05-01 03:13:38

标签: sql

我的数据库中有这些表:

学生

id,
style_id,
instrument,
name,

教师

id,
style_id,
name

教训

id,
style_id,
teacher_id,
student_id,
month

我正在尝试编写一个查询,该查询返回每个特定月份注册的学生以及他们的老师和风格,例如它会返回这样的东西:

三月

Student Name   Teacher   Style
-------------------------------
Glen           Bob       Jazz
Missy          Bruce     Rock

到目前为止,我得到的是这样的(我知道我需要使用连接而不知道如何):

SELECT 
    students.name, teacher.name, style.style_name 
FROM 
    lessons 
WHERE 
    month = "March" 
JOINS students, teachers

2 个答案:

答案 0 :(得分:2)

首先,在您的主键中使用表格的名称并不是一个好习惯,在您的表格教师中,您使用了musician_id,而是使用teacher_id。这是我用来实现你想要做的事情的代码。

SELECT a.style_name, b.name, c.name, d.month
FROM lessons d
INNER JOIN Styles a ON a.style_id = d.style_id
INNER JOIN Student b ON b.student_id = d.student_id
INNER JOIN Teacher c ON c.teacher_id = d.teacher_id
WHERE d.month = "march";

由于您在连接方面遇到困难,因此Inner join会查看两个表中的ID的证据是否返回true,这就是为什么它可以解决您的问题。

答案 1 :(得分:1)

要回答您的具体问题,

SELECT Student.name AS Student, Teacher.name AS Teacher, Styles.style_name AS Style
FROM lessons 
INNER JOIN Styles ON lessons.style_id = Styles.style_id 
INNER JOIN Teacher ON lessons.teacher_id = Teacher.musician_id 
INNER JOIN Student ON lessons.student_id = Student.student_id
WHERE lessons.month="March";

但是,您可能希望查看表格设计。课程中有一个style_id,教师和学生表。上面的查询将样式名称与课程表中的style_id匹配,而它可以链接到Teacher表或Student表。如果Bob正在教授爵士课程并且他的个人资料说他是Rock老师,这可能会导致报告问题。

最好从教师和学生表中删除style_id并引入新表 兴趣:participant_id(可以是教师ID或学生ID),角色('老师'或'学生'),style_id