google-bigquery - BigQuery 在 WHERE 子句中的 WITH 子句下引用子查询
问题描述
基本上,我想将 WITH 子句中定义的ListOfIds子查询直接引用为单列表。例如,我想实现以下目标。
WITH
ListOfIds AS (
SELECT
Id
FROM
...)
SELECT
*
FROM
...
WHERE
Id IN ListOfIds
上述语法导致ListOfIds is not defined on Id IN ListOfIds行的错误
到目前为止,我能得到的最接近的是以下内容,我不喜欢它,因为它有些复杂和冗余的语法。
WITH
ListOfIds AS (
SELECT
Id
FROM
...)
SELECT
*
FROM
...
WHERE
Id IN (
SELECT
Id
FROM
ListOfIds)
提前感谢您的任何帮助或建议。
解决方案
首先是一个注释。你可能不想这样做。
CTE(WITH 查询)对于通常编码的人来说有点违反直觉,因为它感觉像是一个变量,但事实并非如此。实际发生的情况是,您多次运行查询来评估它,导致性能不佳并额外花费了 $$。
我建议你用一个简单的 JOIN 替换它,它会达到同样的效果,而且通常会更好。
基本上你的查询会是这样的:
WITH list_of_ids AS (
SELECT id FROM table_with_ids
)
SELECT main_table.*
FROM main_table
JOIN list_of_ids
ON main_table.id = list_of_ids.id
我认为它的语法很简洁,可以解决您的问题。让我知道是否有我遗漏的东西,我可以补充。
推荐阅读
- java - 无法在多个 RabbitMQ 交换之间发送消息
- android - 如何从 xml 布局父级获取样式属性
- python - Python - 如何从 HDFS 读取 xml?
- javascript - 提交表单并在没有 jQuery 的情况下获得 JSON 响应
- android - 使用谷歌播放的应用签名上传 Android APK 失败
- apache-kafka - 卡夫卡停止正确启动
- spring - Kubernetes Secret 和 Spring Boot 配置
- swift - XCode/Swift:如何获取弹出按钮的值
- laravel - 预期状态码 200 但收到 302
- .htaccess - 浏览器更新后服务器响应 403 错误