【发布时间】:2011-03-17 02:12:24
【问题描述】:
是否可以将两个表(具有相同字段)中的数据抓取到一个视图中。基本上,视图将数据视为一张表。
【问题讨论】:
是否可以将两个表(具有相同字段)中的数据抓取到一个视图中。基本上,视图将数据视为一张表。
【问题讨论】:
是的,使用 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 语句。没有性能优势,如果您基于另一个视图构建视图,可能会对性能产生负面影响。此外,视图很脆弱 - 它们可能会发生变化,并且在使用支持视图之前您不会知道是否存在问题。
【讨论】:
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 更改时添加列名。)
【讨论】: