问题描述
给定关系:
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