加入与父母和祖父母的关系

问题描述

给定关系:

Teacher -> Students -> Advisors

也可以

Teacher -> Advisors

如果顾问的 FK 指向老师而不是学生,我该如何编写一个 join 语句来显示学生的空值?不用写两个单独的 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,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,NULL,a.name
FROM teacher t JOIN
     advisor
     ON s.teacherId = a.personId
,

使用联合所有:

SELECT t.teacherId,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,null,FROM teacher t 
JOIN advisor
  ON s.teacherId = a.personId

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...