是否可以为SQL匿名VALUES子句指定自定义列名?
结论
完全可以为VALUES子句返回的列自定义名称,不存在用了匿名VALUES就没法定义列名的情况,主流SQL方言(PostgreSQL、MySQL 8.0+、SQL Server、SQLite等)都支持两种实现方式:
方式1:派生表后直接指定列名(最推荐,兼容性最好)
不需要依赖数据库对匿名VALUES的默认列名规则,在子查询的别名后直接按顺序定义所有列名即可:
SELECT id, letter FROM (VALUES (1,'a'), (2,'b')) AS t(id, letter);
方式2:SELECT层单独别名(也就是你示例的写法)
这种写法也可以正常运行,前提是要匹配你所用数据库对匿名VALUES的默认列名规则:
比如PostgreSQL中匿名VALUES的默认列名为column1、column2,对应写法如下:
SELECT column1 AS id, column2 AS letter FROM ( VALUES (1,'a'),(2,'b') ) AS t;
注意这种写法兼容性较差,不同数据库的默认列名规则不一样,比如部分数据库会默认命名为
col1、col2,或者expr1、expr2,不如第一种写法通用。
内容的提问来源于stack exchange,提问作者David542
相关产品推荐
相关产品推荐

