BigQuery是否支持在IN子句中使用WITH定义的视图?
BigQuery IN子句引用CTE报错问题解答
你编写的SQL触发Unrecognized name错误,本质是BigQuery不支持直接在IN子句后直接引用WITH关键字定义的CTE名称,这一要求也符合标准SQL的通用规范。
错误原因
IN运算符的使用规则为:
- 若后接固定值列表,可直接写
IN (val1, val2, val3) - 若后接查询返回的结果集,必须将查询语句包裹在括号内作为子查询使用
你直接在IN后写CTE名称validyears,会被BigQuery解析为单个变量/字段名,而非你定义的数据集,因此触发未识别名称报错。
正确写法
写法1:子查询包裹CTE引用
WITH validyears as (SELECT Year FROM movies WHERE Year > 2005) SELECT * FROM movies WHERE Year IN (SELECT Year FROM validyears)
写法2:JOIN实现(大数据量下性能更优)
WITH validyears as (SELECT Year FROM movies WHERE Year > 2005) SELECT m.* FROM movies m INNER JOIN validyears v ON m.Year = v.Year
内容的提问来源于stack exchange,提问作者Mehmet Ates
相关产品推荐
相关产品推荐

