如何显示两个相对表的数据?

问题描述 投票:0回答:2

我有下表,其中插入了一些信息。这是一个例子:

餐桌人

id_person       name
--------------------------
   1            name1
   2            name2
   3            name3
   4            name4
   5            name5
   6            name6

[餐桌教授

id_professor (references id_person)
------------
     1
     2
     5
     6

桌生

id_student (references id_person)
----------
    1
    3
    4
    5

我想执行一个select,它显示来自所有表的几乎所有数据,但仅显示来自学生或教授的人员。因此,给出这个示例,我想得到的输出是:

 name        id_professor      id_student      
-------------------------------------------
 name2           2                NULL
 name3          NULL               3
 name4          NULL               4
 name6           6                NULL

我该怎么做?

我尝试执行此查询没有成功:

select p.name, s.id_student, pr.id_professor from 
person p inner join student s on p.id_person = s.id_student right join professor r on s.id_student = pr.id_professor
where (s.id_student is null) or (pr.id_professor is null);
sql join outer-join
2个回答
0
投票
您可以使用两个left join和一些过滤条件:

select p.name, pr.id_professor, s.id_student from person p left join professor pr on pr.id_professor = p.id_person left join student s on s.id_student = p.id_person where (pr.id_professor is not null and s.id_student is null) or (pr.id_professor is null and s.id_student is not null);


0
投票
此查询将为您提供所有人或教授或两者兼而有之的人

select p.name, pr.id_professor, s.id_student from person p left join professor pr on pr.id_professor = p.id_person left join student s on s.id_student = p.id_person where s.id_student is not null or pr.id_professor is not null

© www.soinside.com 2019 - 2024. All rights reserved.