snowflake-cloud-data-platform - 带有别名的子查询失败,标识符为“T1.C0”
问题描述
SELECT t1.c0, t1.c1::VARCHAR(16777216), t1.c2::VARCHAR(16777216), t1.c3::VARCHAR(16777216), t1.c4::VARCHAR(16777216) FROM (SELECT (t0."PERSONID"::NUMBER(38, 0))::DOUBLE, t0."LASTNAME"::VARCHAR(255), t0."FIRSTNAME"::VARCHAR(255), t0."ADDRESS"::VARCHAR(255), t0."CITY"::VARCHAR(255) FROM "PERSONS_SNW" AS t0) AS t1 (c0, c1, c2, c3, c4) WHERE c0 = 1
上面的 sql 因 SQL 编译错误而失败:位置 7 处的错误行 1 无效标识符 'T1.C0' 为什么我们不能将选择别名附加到列别名中?
SELECT c0, c1::VARCHAR(16777216), c2::VARCHAR(16777216), c3::VARCHAR(16777216), c4::VARCHAR(16777216) FROM (SELECT (t0."PERSONID"::NUMBER(38, 0))::DOUBLE, t0."LASTNAME"::VARCHAR(255), t0."FIRSTNAME"::VARCHAR(255), t0."ADDRESS"::VARCHAR(255), t0."CITY"::VARCHAR(255) FROM "PERSONS_SNW" AS t0) AS t1 (c0, c1, c2, c3, c4) WHERE c0 = 1
解决方案
似乎 Snowflake 无法处理子查询的列别名(目前)。也许您可以提交有关它的支持票。不确定这是一个错误还是故意不支持。
-- not working
SELECT t1.c0 FROM
(SELECT v1,v2 from testy) as t1(c0, c1);
-- working if you define alias in subquery
SELECT t1.c0 FROM
(SELECT v1 c0, v2 from testy) as t1;
-- working if you use CTE instead of subquery
with t1 (c0, c1) as
(SELECT * from testy)
SELECT t1.c0 FROM t1;
您可以在子查询中定义别名,也可以使用 CTE 代替子查询。
推荐阅读
- visual-c++ - 搜索选择数据并在特定的 manar 中打印
- debian - 关于在 Linux 上运行基于 JavaScript 的机器人的问题
- python - 尝试使用 poscopg2 将参数传递给 postgreSQL 命令的语法错误
- java - 无法启动 Eclipse 内存分析器 (MAT)
- javascript - 当触发器设置为手动时,引导弹出窗口不显示 html 内容
- linux - 将带有 filebeat 的日志发送到 logstash
- javascript - 将 Google DFP 广告单元标题(“广告”)添加到所有具有白色背景和内边距的广告
- angular - 角度材料侧边栏显示水平
- git - 按下“变基并合并”后,已验证的签名消失了
- powerbi - 有没有办法将书签按钮的数量转换为 PowerBI 中的下拉列表/切片器?