使用具有相同结构的2个表创建包含数据(不重复)的视图

时间:2016-01-19 14:09:21

标签: sql oracle

在oracle数据库中,我有2个具有相同结构的表(相同的列)。一个正在迁移到另一个。问题是我需要创建一个从2个表中读取记录的视图,这样在迁移过程中就可以读取所有记录。如果有重复记录,则只应在视图中显示表1中的记录。

表1

SELECT   *
INTO #Temptbl
FROM   RWSupervisor

表2

USER_ID       START_DATE       END_DATE
1             2015-08-12       2015-12-08
2             2015-02-25       2015-06-01
3             2015-04-14       2015-09-21

视图应包含以下数据:

USER_ID       START_DATE       END_DATE
2             2015-02-25       2015-06-01
4             2015-12-20       2016-01-13

这可能吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

如果你说重复记录时你的意思是所有3列是相同的,那么我不明白为什么你想要它们来自表a,因为它们是相同的。

此外,您只需创建视图:

select * from table1
union
select * from table2

将消除所有重复项,并且基本上将保留table1中的那些,因为它是第一个表(尽管没关系)

如果你坚持这样做,就像你说的那样,可能是因为不是所有的列都需要相同。

那么你需要的是一个完整的外连接

SELECT case when a.id is not null then a.id else b.id end as id,
case when a.id is not null then a.start_date else b.start_date end as start_date,
case when a.id is not null then a.end_date else b.end_date as end_Date
from table a full outer join table2 b on (a.id = b.id)

答案 1 :(得分:1)

这是我正在寻找的答案,比sagi的答案更简洁

select *
from table1
union all
select *
from  table2 a
where  not exists (select null from table1 where user_id = a.user_id);