在 Oracle 中从三个不同的 table 中选择匹配值并将它们合并为一个 table

Selecting Matching values from three different table and combining them in one table in Oracle

我有四个table如下

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)

现在我想 select 一个特定的评论,并想用

创建一个 table

关联会议

链接的答案

链接任务

我该如何处理?

我尝试编写连接查询,但只有在所有 table 中都存在 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;

注意:这里我尝试了static Rev_ID =142来检查数据。

从上面的查询中,只有当所有四个 table 中都存在数据时,我才会得到输出,但是如果数据在任何 table 中都不存在,它就没有 return 剩余值。

我想要 at-least 最终输出中所有 table 的名称。

尝试以下操作,如果这符合您的要求,请告诉我们。

  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 Demo

如果上面的SQL没问题,在前面加上create table或者view syntax把它们合二为一