与 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