首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从两个具有相同结构的表创建数据视图(不重复)

从两个具有相同结构的表创建数据视图(不重复)
EN

Stack Overflow用户
提问于 2016-01-19 14:09:20
回答 2查看 94关注 0票数 0

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

表1

代码语言:javascript
运行
复制
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

表2

代码语言:javascript
运行
复制
USER_ID       START_DATE       END_DATE
2             2015-02-25       2015-06-01
4             2015-12-20       2016-01-13

视图应包含以下数据:

代码语言:javascript
运行
复制
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
4             2015-12-20       2016-01-13

这个是可能的吗?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-26 19:04:40

这就是我一直在寻找的答案,比萨吉的答案要少得多。

代码语言:javascript
运行
复制
select *
from table1
union all
select *
from  table2 a
where  not exists (select null from table1 where user_id = a.user_id);
票数 1
EN

Stack Overflow用户

发布于 2016-01-19 14:16:26

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

此外,您还可以将视图创建为:

代码语言:javascript
运行
复制
select * from table1
union
select * from table2

这将消除所有的重复,并基本上将保持这些从table1,因为它的第一个表(尽管这并不重要)

如果你像你说的那样固执地做这件事,也许是因为并不是所有的列都是一样的。

那么您需要的是一个完全的外部连接。

代码语言:javascript
运行
复制
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)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34878954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档