我有两张桌子:
students
+-------+------+
| id | name |
+-------+------+
| 1 | Bob |
+-------+------+
| 2 | Sam |
+-------+------+
和
courses
+----+------------+---------+--------+
| id | student_id | teacher | period |
+----+------------+---------+--------+
| 1 | 1 | Mr. X | 1 |
+----+------------+---------+--------+
| 2 | 1 | Ms. Y | 2 |
+----+------------+---------+--------+
| 3 | 2 | Mr. X | 2 |
+----+------------+---------+--------+
| 4 | 2 | Ms. Y | 3 |
+----+------------+---------+--------+
这是我需要从这两个表中得到的结果:
list of students and period 1 teacher
+------------+------+-----------------+
| student_id | name | period 1 teacher|
+------------+------+-----------------+
| 1 | Bob | Mr. X |
+------------+------+-----------------+
| 2 | Sam | null |
+------------+------+-----------------+
好的,我需要一个学生名单和他们在一段时间内的老师(在这种情况下,第1期)。但是,他们可能没有在课程表中列出那段时间的老师,在这种情况下,我希望该学生的该栏目为“空”(如上所述“Sam”)。
我最接近的是:
SELECT students.id,students.name,courses.teacher
FROM students
LEFT JOIN courses ON students.id = courses.student_id AND courses.period = '1'
但我只能找回BOTH表中存在的行(在这个例子中,只有'Bob'学生才会被退回,因为'Sam'没有1期教师。
我确信这很简单,但到目前为止,我的谷歌已经失败了。
答案 0 :(得分:0)
你可以试试这个:
SELECT students.id,students.name,courses.teacher
FROM students
LEFT JOIN (select * from courses WHERE courses.period = '1') courses
ON students.id = courses.student_id
答案 1 :(得分:0)
如果我理解正确并且根据上下文只出现在学生BOB。
假设这是真的,将INFT替换为LENER将起作用。
SELECT students.id,students.name,courses.teacher
FROM students
INNER JOIN courses ON students.id = courses.student_id AND courses.period = '1'
我希望它有用