我的数据库中有这些表:
学生:
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
答案 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