两个表中的数据到一个视图中

时间:2010-07-16 17:21:01

标签: sql oracle sql-view

是否可以从两个表(具有相同字段)中将数据捕获到一个视图中。基本上,视图将数据视为一个表。

2 个答案:

答案 0 :(得分:23)

是的,使用UNION -

CREATE VIEW vw_combined AS
   SELECT * FROM TABLE1
   UNION ALL
   SELECT * FROM TABLE2

...要求列数相同,数据类型在每个位置匹配。

..最好使用JOIN:

CREATE VIEW vw_combined AS
   SELECT * 
    FROM TABLE1 t1
    JOIN TABLE2 t2 ON t2.col = t1.col

但我想根据视图发出警告 - 如果没有实现,它们只是准备好的SQL语句。没有性能优势,如果您基于另一个构建视图,则会对性能产生负面影响。此外,视图很脆弱 - 它们可以更改,如果出现问题,您将无法使用支持视图。

答案 1 :(得分:1)

create or replace view view_name as
select * from table_1
union all select * from table_2

注意: 视图中的列是在创建视图时设置的。在视图创建后向table_1和table_2添加列将不会显示在view_name中。您需要重新运行上面的DDL才能显示新列。

如果您希望将重复行压缩为单行(但可能更多地为服务器工作):

create or replace view view_name as
select * from table_1
union select * from table_2

通常在选择列表中使用*是不好的形式,但假设使用视图的查询将选择他们需要的内容,我会在这里使用它而不是明确地命名所有列。 (特别是因为我不希望在table_1和table_2更改时添加列名。)