SQL中能否创建包含重复列的VIEW视图?
结论
你写的SQL语法本身合法,在PostgreSQL、Oracle、SQL Server等绝大多数支持标准SQL的数据库中都能成功执行创建视图,但完全达不到你「创建原表完全匹配副本」的预期目标。
详细说明
- 语法合法性验证:这条语句执行后生成的
VIEWNAME视图会包含两列,一列是原表的ID字段,另一列是ID字段复制后重命名的ID2字段。唯一需要注意的是你给ID2加了双引号,在支持标准SQL标识符规则的数据库中,这会强制列名大小写敏感,后续查询必须严格引用大写的"ID2"才能匹配到该列,否则会报列不存在的错误。 - 为什么不符合你的需求:
- 首先
CREATE VIEW创建的是视图,不是实体表副本。视图只是一段预存的查询逻辑,本身不独立存储数据,查询视图时本质还是在查原表,原表数据变动视图结果会同步变,原表被删除视图会直接失效,完全没有副本的独立性。 - 其次你的查询语句只选了
ID这一个字段,原表的其他所有字段都不会出现在视图里,根本不可能做到和原表完全匹配。
- 首先
对应需求的正确写法
如果要创建独立存储数据的实体表副本,包含原表全部字段,同时额外加上复制重命名的ID2列,用建表查询语法即可:
CREATE TABLE NEW_TABLENAME AS SELECT *, ID AS ID2 FROM TABLENAME;
如果你实际要的就是视图,只是想让视图包含原表所有字段外加ID2列,补全查询字段就行:
CREATE VIEW VIEWNAME AS SELECT *, ID AS ID2 FROM TABLENAME;
内容的提问来源于stack exchange,提问作者qwertz
相关产品推荐
相关产品推荐

