与 parent 和 grandparent 相关联
Join with relation to parent and grandparent
给定关系:
Teacher -> Students -> Advisors
也可以
Teacher -> Advisors
当顾问的 FK 指向教师而不是学生时,我如何编写一个连接语句来显示学生的空值?不写两个单独的 select 语句?
截至目前,我的查询如下所示:
SELECT
t.teacherId, t.name,
s.studentId, s.name,
a.advisorId, a.name,
FROM
teacher t
JOIN
student s ON t.teacherId = s.teacherId
JOIN
advisor ON s.studentId = a.personId
编辑: 基本上我希望将下面的查询结果与上面的查询结果结合起来。但是因为某些 FK 缺少中间的连接(学生),我希望它们显示为 null
SELECT
t.teacherId, t.name,
a.advisorId, a.name,
FROM
teacher t
JOIN
advisor ON s.teacherId = a.personId
使用union all
:
SELECT t.teacherId, t.name,
s.studentId, s.name,
a.advisorId, a.name
FROM teacher t JOIN
student s
ON t.teacherId = s.teacherId JOIN
advisor a
ON s.studentId = a.personId
UNION ALL
SELECT t.teacherId, t.name,
NULL, NULL,
a.advisorId, a.name
FROM teacher t JOIN
advisor
ON s.teacherId = a.personId
使用 UNION ALL:
SELECT t.teacherId, t.name,
s.studentId, s.name,
a.advisorId, a.name,
FROM teacher t
JOIN student s
ON t.teacherId = s.teacherId
JOIN advisor
ON s.studentId = a.personId
UNION ALL
SELECT t.teacherId, t.name,
null, null,
a.advisorId, a.name,
FROM teacher t
JOIN advisor
ON s.teacherId = a.personId
给定关系:
Teacher -> Students -> Advisors
也可以
Teacher -> Advisors
当顾问的 FK 指向教师而不是学生时,我如何编写一个连接语句来显示学生的空值?不写两个单独的 select 语句?
截至目前,我的查询如下所示:
SELECT
t.teacherId, t.name,
s.studentId, s.name,
a.advisorId, a.name,
FROM
teacher t
JOIN
student s ON t.teacherId = s.teacherId
JOIN
advisor ON s.studentId = a.personId
编辑: 基本上我希望将下面的查询结果与上面的查询结果结合起来。但是因为某些 FK 缺少中间的连接(学生),我希望它们显示为 null
SELECT
t.teacherId, t.name,
a.advisorId, a.name,
FROM
teacher t
JOIN
advisor ON s.teacherId = a.personId
使用union all
:
SELECT t.teacherId, t.name,
s.studentId, s.name,
a.advisorId, a.name
FROM teacher t JOIN
student s
ON t.teacherId = s.teacherId JOIN
advisor a
ON s.studentId = a.personId
UNION ALL
SELECT t.teacherId, t.name,
NULL, NULL,
a.advisorId, a.name
FROM teacher t JOIN
advisor
ON s.teacherId = a.personId
使用 UNION ALL:
SELECT t.teacherId, t.name,
s.studentId, s.name,
a.advisorId, a.name,
FROM teacher t
JOIN student s
ON t.teacherId = s.teacherId
JOIN advisor
ON s.studentId = a.personId
UNION ALL
SELECT t.teacherId, t.name,
null, null,
a.advisorId, a.name,
FROM teacher t
JOIN advisor
ON s.teacherId = a.personId