【发布时间】:2018-04-02 21:42:35
【问题描述】:
所以我有 5 个表如下:
CREATE TABLE student (
id serial PRIMARY KEY,
name varchar(255) NOT NULL
-- other columns, constraints, etc...
);
CREATE TABLE teacher (
id serial PRIMARY KEY,
name varchar(255) NOT NULL
-- other columns, constraints, etc...
);
CREATE TABLE course(
id serial PRIMARY KEY,
name varchar(255) NOT NULL
-- other columns, constraints, etc...
);
CREATE TABLE student_course (
student_id integer NOT NULL REFERENCES student(id),
course_id integer NOT NULL REFERENCES course(id)
);
CREATE TABLE teacher_course (
teacher_id integer NOT NULL REFERENCES teacher(id),
course_id integer NOT NULL REFERENCES course(id)
);
我想查询哪个学生和哪个老师学习什么课程。
SELECT s.name, c.name, t.name
FROM student s
JOIN student_course sc ON s.id = sc.student_id
JOIN course c ON sc.course_id = c.id
JOIN teacher_course tc ON c.id = tc.course.id
JOIN teacher t ON tc.teacher_id = t.id
但结果不是我想要的。就像 1 名学生和 2 名不同的老师一起学习一门学科。这不是输入问题,因为我检查并在teacher_course 和student_course 中都没有重复输入。所以我认为问题出在我的查询上。谁能告诉我哪里出错了?
【问题讨论】:
-
你能发布输出吗?
-
@AkankhaAhmed 我刚刚做到了。请检查一下
-
嘿。您在这里提供数据示例sqlfiddle.com/#!9/6479c9/1 来重现问题会很复杂吗?查询乍一看似乎没问题。另外,您使用的是什么版本的 MySQL?
-
您的结果并未显示所有列。
-
可能是在黑暗中拍摄,但你可以试试这个版本的查询:'SELECT s.name, c.name, t.name FROM student s, student_course sc, course c, teacher_course tc , 老师 t WHERE s.id = sc.student_id AND sc.course_id = c.id AND c.id = tc.course_id AND tc.teacher_id = t.id' 从技术上讲它应该做同样的事情,但是......谁知道呢。