2010-07-16 1387 views

回答

19

是,使用UNION -

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

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

..preferrably,使用JOIN:

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

但我想提醒不要根据意见 - 如果没有兑现,他们只准备的SQL语句。没有性能优势,并且如果基于另一个视图构建视图,可能会对性能产生负面影响。此外,视图很脆弱 - 它们可以改变,如果有问题,直到使用支持视图才会知道。

+3

“最好使用JOIN”只有满足要求时才可以。我没有看到表1和表2中的行在连接方式上有意义的联系。 OP声明:“有相同的领域”,所以如果类型匹配,工会就会工作。 – 2010-07-16 17:32:14

+1

@ Shannon Severance:我不认为有必要对逻辑进行审查或提供可能有用的其他信息。 – 2010-07-16 17:37:04

+4

我同意提及连接是很好的,因为有两种方法可以将两个表合并在一起,使得结果比表自己的表更长或更宽。 (对于那个顺便说一句,+1)。我不认为一个人对于另一个人比较喜欢,而不知道OP想要做什么。 – 2010-07-16 17:50:09

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以显示新列。

如果你想重复的行被collasped单排(但对于服务器可能更多的工作):

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

一般来说它是坏的形式在选择列表中使用*,但假设查询使用视图将选择他们需要的,我会在这里使用它,而不是明确命名所有的列。 (特别是因为我不想在table_1和table_2发生更改时添加列名称。)

+0

+1:我忘了在创作时提及这些专栏 – 2010-07-16 17:30:54

+0

@OMG小马:最近我有点想到它,它在记忆银行中很新鲜。 – 2010-07-16 17:50:32