AWS Redshift中T-SQL的'='别名写法失效,求无需改查询的解决办法
Redshift不支持SQL Server式
[别名]=列别名写法的解决方案 Redshift基于PostgreSQL,遵循ANSI SQL规范,不支持SQL Server那种[别名] = 列的非标准别名写法,而且没有无需修改现有查询就能规避这个问题的办法——你必须调整查询语句的写法。
两种数据库的写法对比
SQL Server(支持两种别名写法)
SELECT fileid AS ID FROM tableA; -- 正常生效 SELECT [ID] = fileid FROM tableA; -- 正常生效
AWS Redshift(仅支持标准别名写法)
SELECT fileid AS ID FROM tableA; -- 正常生效 SELECT [ID] = fileid FROM tableA; -- 报错:ERROR: column id does not exist in table A.
报错原因
Redshift会把[ID]解析为tableA中实际存在的列名,而不是你想定义的别名。因为表中没有ID列,所以触发报错。
解决办法
把所有[别名] = 列的写法替换成ANSI标准的别名格式:
- 显式写法:
列名 AS 别名 - 简化写法:
列名 别名(用空格分隔)
比如把报错的查询改成:
SELECT fileid AS ID FROM tableA; -- 或者简化成 SELECT fileid ID FROM tableA;
内容的提问来源于stack exchange,提问作者Yong Cai
相关产品推荐
相关产品推荐

