误将表名作为查询列创建的特殊SQL视图属于什么类型?
问题解答
你创建的是普通SQL视图,用到的是PostgreSQL特有的**复合类型(行类型)**语法特性:
- 你编写的
create myview as select node from node join othertable using (id)语句中,select后的node不是列名,是将node表匹配到的整行数据作为一个复合类型值返回,视图中仅存储了一个类型为node表对应行类型的字段,字段名默认和表名一致为node。 select (node).* from myview是PostgreSQL提供的复合类型字段展开语法:当你需要将复合类型字段里存储的整行数据拆分为多个单独列返回时,需要给复合类型字段名加括号避免语法解析歧义,再加.*即可展开所有字段。
如果你需要搜索相关资料,可以使用以下关键词:
- PostgreSQL 复合类型
- PostgreSQL row type
- PostgreSQL composite type dot notation
补充说明:该用法仅在PostgreSQL中支持,其他主流数据库(MySQL、Oracle、SQL Server等)不支持将整行作为单个字段返回的语法,也不支持对应的
(列名).*展开写法。
内容的提问来源于stack exchange,提问作者Cemre Mengü
相关产品推荐
相关产品推荐

