Как я могу показать данные двух противоположных таблиц? - PullRequest
0 голосов
/ 02 марта 2020

У меня есть следующие таблицы с некоторой информацией, вставленной в них. Вот пример:

Стол Человек

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);

Ответы [ 2 ]

1 голос
/ 02 марта 2020

Вы можете использовать два 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 голосов
/ 02 марта 2020

Этот запрос даст вам всех людей, которые являются или человеком, или профессором, или обоими

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
...