是否可以将两个表(具有相同字段)中的数据抓取到一个视图中。基本上,视图将数据视为一张表。
问问题
94633 次
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 回答