Выбор соответствующих значений из трех разных таблиц и объединение их в одну таблицу в Oracle - PullRequest
0 голосов
/ 01 июля 2018

У меня есть четыре таблицы следующим образом

Review (REV_ID pk , REV_NAME)

Meeting (MEETING_ID pk,MEETING_NAME,REV_ID fk to Review)

Task (TASK_ID pk,TASK_NAME,REV_ID fk to Review)

Answer (ANS_ID pk,ANS_NAME,REV_ID fk to Review)

Теперь я хочу выбрать конкретный отзыв и создать таблицу с

Связанные собрания

Связанные ответы

Связанные задачи

Как мне поступить с этим?

Я пытался написать запрос на соединение, но мне удалось получить данные, только если Rev_ID присутствует во всех таблицах?

select * from 
(SELECT *
FROM meeting
WHERE EXISTS (SELECT *
              FROM review WHERE meeting.rev_id 
=review.rev_id)
and meeting.rev_id=142),
(SELECT *
FROM answer
WHERE EXISTS (SELECT *
              FROM review WHERE answer.rev_id 
=rev.rev_id)
and answer.ans_rev_id=142),

(SELECT *
FROM task
WHERE EXISTS (SELECT *
              FROM review WHERE task.rev_id 
=review.rev_id)
and task.rev_id=142) r;

Примечание: здесь я попробовал статический Rev_ID = 142 для проверки данных.

Из вышеприведенного запроса я получаю выходные данные, только если данные существуют во всех четырех таблицах, но если данные не существуют ни в одной таблице, они не возвращают оставшееся значение.

Мне нужны как минимум имена всех таблиц в окончательном выводе.

1 Ответ

0 голосов
/ 01 июля 2018

Попробуйте следующее, дайте нам знать, если это соответствует вашим требованиям.

  SELECT rv.rev_id,
       rv.rev_name,
       mt.meeting_name,
       tk.task_name,
       ans.ans_name
  FROM review rv
       LEFT OUTER JOIN meeting mt ON (rv.rev_id = mt.rev_id)
       LEFT OUTER JOIN task tk ON (rv.rev_id = tk.rev_id)
       LEFT OUTER JOIN answer ans ON (rv.rev_id = ans.rev_id)
 WHERE rv.rev_id = 142

Демонстрация SQL Fiddle

Если приведенный выше SQL подходит, добавьте к нему синтаксис create table или view, чтобы объединить их в один.

...