是否可以从两个表(具有相同字段)中将数据捕获到一个视图中。基本上,视图将数据视为一个表。
答案 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更改时添加列名。)