21

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

4

2 回答 2

35

是的,使用 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 语句。没有性能优势,如果您基于另一个视图构建视图,可能会对性能产生负面影响。此外,视图是脆弱的——它们可以改变,如果有问题,你不会知道直到使用支持视图。

于 2010-07-16T17:23:46.910 回答
2
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 更改时添加列名。)

于 2010-07-16T17:27:26.493 回答