例如,如果我有两个名为“教师”、“课程”和“课程”的表,外键“teacher_ID”指的是“教师”表中的外键“”,那么如果没有与其连接的课程,如何从“教师”all的相应课程中选择“所有”行?我只能让MySQL告诉我老师们有一个或多个附加的课程。
这有可能没有左加入吗?我在谷歌上什么都找不到..。
编辑I对左JOIN关键字的机制感兴趣。但既然似乎没有别的选择,我可以说是结案了。
发布于 2015-11-04 14:10:38
正确的方法是使用LEFT JOIN。这样,如果不匹配,您将得到(teacher_id), null
LEFT关键字返回左侧表(教师)中的所有行,即使右侧表中没有匹配项(课程)。
SELECT teacher.teacher_ID, lesson.lesson_ID
FROM teachers
LEFT JOIN lessons
ON teacher.teacher_ID = lesson.teacher_ID如果您想要模仿LEFT JOIN,首先使用JOIN查找匹配的元素。并使用UNION添加值为NULL的其余部分。
SELECT teacher.teacher_ID, lessons.lesson_ID
FROM teachers
JOIN lessons
ON teacher.teacher_ID = lessons.teacher_ID
UNION
SELECT teacher.teacher_ID, null as lesson_ID
FROM teachers
WHERE NOT EXISTS ( SELECT 1
FROM lessons
WHERE lessons.teacher_id = teacher.teacher_id)https://stackoverflow.com/questions/33523641
复制相似问题