bigquery标准sql-无法使用别名

0ejtzxu1  于 2021-07-29  发布在  Java
关注(0)|答案(2)|浏览(475)

我的公司最近转向了大查询,我现在遇到的一个问题是,标准sql中的大查询不能接受查询中的别名列。
因为我回来了 Unrecognized name: product_code at [3:5] . 有人知道这个问题的解决方法吗?

select sales, t_001 as product_code
 from "project_01.sales_001.trans_datamart"
 where product_code = '001-40040-00'
w8ntj3qf

w8ntj3qf1#

根据文档,您不能引用 SELECT 把它列在清单上 WHERE 条款。where子句根据 bool_expression .
然而,有一种方法可以让你达到你想要的。语法如下:

select sales, product_code
from (select *, t_001 as product_code from "project_01.sales_001.trans_datamart")
where product_code = '001-40040-00'

因此,可以将别名用作 from 子句,使您可以使用刚才在 where 条款。
我还鼓励您查看这个链接,查看关于bigquery中别名的所有解释。

wfsdck30

wfsdck302#

我不知道有哪种sql方言允许在 WHERE 条款。
仅根据示例中的子句,sql引擎通常会对 FROM 子句,确定从哪些表中提取数据,然后计算 WHERE 子句来筛选检索到的数据,然后 SELECT 子句来确定要显示什么以及如何显示它。
鉴于此,sql引擎在读取 WHERE 条款。
因此,您可以选择使用 WHERE 子句,或者,正如gordon在注解中建议的那样,将别名放在子查询或cte中,该子查询或cte将作为 FROM 条款。
列名:

select sales, t_001 as product_code
 from "project_01.sales_001.trans_datamart"
 where t_001 = '001-40040-00'               --<--- Modification here.

子查询:

select
  sales,
  product_code
from 
(
 select sales, t_001 as product_code
 from "project_01.sales_001.trans_datamart"
) as d
 where product_code = '001-40040-00'

相关问题