SQL中无需创建实体表即可创建带默认值集合的视图咨询
实现纯虚拟默认值SQL视图的方案
该需求完全可实现,全程不需要创建任何实体表,仅需修正原示例代码中缺失的列别名定义即可。
原代码缺陷说明
你当前的写法没有为VALUES生成的派生表、以及派生表内的列指定别名,绝大多数SQL引擎无法自动识别输出列名,会直接抛出语法错误。
通用合规写法(适配PostgreSQL、SQL Server、Oracle、MySQL 8.0.19及以上版本)
CREATE VIEW PersonalView AS SELECT * FROM ( VALUES ('Sara', 'Moradi', 22) ) AS PersonalData(first_name, last_name, age);
- 补充说明:如果需要存储多组默认值,只需要在
VALUES子句中追加逗号分隔的行即可,例如:
CREATE VIEW PersonalView AS SELECT * FROM ( VALUES ('Sara', 'Moradi', 22), ('Alex', 'Smith', 30) ) AS PersonalData(first_name, last_name, age);
- 注意事项:如果列是数值、日期等非字符串类型,不需要给对应值加单引号,避免类型隐式转换带来的潜在问题。
低版本MySQL兼容写法
对于MySQL 8.0.19之前不支持VALUES行构造派生表的版本,可以用UNION ALL拼接单行SELECT的方式实现:
CREATE VIEW PersonalView AS SELECT 'Sara' AS first_name, 'Moradi' AS last_name, 22 AS age UNION ALL -- 追加更多默认行直接在下方新增SELECT语句即可 SELECT 'Alex' AS first_name, 'Smith' AS last_name, 30 AS age;
以上实现的都是纯虚拟视图,不会持久化存储任何实体数据,完全符合你“不创建实体表”的要求。
内容的提问来源于stack exchange,提问作者Sara Moradi
相关产品推荐
相关产品推荐

