为何BigQuery中第一个查询的外部WHERE条件未作用于子查询?
嵌套查询外部WHERE条件未生效的原因
这本质是SQL查询的执行顺序和子查询类型导致的:
第一个查询的子查询属于非关联独立子查询:SQL引擎会优先执行子查询——先筛选所有带
highway标签的记录,再取前1000条,这一步完全不受外部WHERE条件的影响。等子查询生成1000条结果集后,外部查询才会在这个小结果集里尝试筛选osm_id=682085476的记录。如果这1000条里恰好没有匹配的osm_id,就会出现外部WHERE条件相当于失效、返回1000条各异osm_id的情况。第二个查询把
osm_id条件放进子查询:此时子查询会先同时满足「带highway标签」和「osm_id=682085476」两个条件,精准拿到目标记录后,外部查询再筛选roadtype,自然能得到符合预期的1条结果。
简单来说,非关联子查询是“先执行完子查询拿到结果,再做外部过滤”,外部条件不会反向作用于子查询的执行逻辑;而把条件嵌入子查询,是“先精准缩小数据范围,再做后续处理”,逻辑顺序的差异直接导致了结果不同。
内容的提问来源于stack exchange,提问作者Makketronix
相关产品推荐
相关产品推荐

