BigQuery标准SQL关联子查询报错,求可行解决方案
BigQuery下实现表纵向拼接的解决方案
问题原因
你提供的SQL语句在BigQuery中报错,是因为BigQuery不支持嵌套的关联子查询——也就是在EXISTS子查询内部又嵌套了一个依赖外部表table_2的子查询,这种结构无法被BigQuery自动转换为高效的JOIN操作,因此触发报错。
可行解决方案
方案1:使用集合操作(EXCEPT)筛选目标行
通过EXCEPT剔除table_2中与table_1重复的(ID, CODE)组合,同时确保ID存在于table_1中:
#standardSQL SELECT * FROM table_1 UNION ALL SELECT ID, CODE FROM ( -- 先筛选table_2中ID存在于table_1的行 SELECT ID, CODE FROM table_2 WHERE ID IN (SELECT DISTINCT ID FROM table_1) ) t2 -- 剔除掉和table_1中(ID, CODE)重复的行 EXCEPT DISTINCT SELECT ID, CODE FROM table_1
方案2:使用JOIN过滤(性能更优)
通过INNER JOIN确保ID存在于table_1,再通过LEFT JOIN剔除重复的(ID, CODE)组合:
#standardSQL SELECT * FROM table_1 UNION ALL SELECT t2.ID, t2.CODE FROM table_2 t2 -- 确保table_2的ID存在于table_1中 INNER JOIN (SELECT DISTINCT ID FROM table_1) t1_ids ON t2.ID = t1_ids.ID -- 匹配table_1中已有的(ID, CODE)组合 LEFT JOIN table_1 t1 ON t2.ID = t1.ID AND t2.CODE = t1.CODE -- 只保留table_1中没有的(ID, CODE)行 WHERE t1.ID IS NULL
结果验证
两种方案都会返回你期望的结果:保留table_1的所有行,同时追加table_2中符合条件的bb s、cc k、cc s三行。
内容的提问来源于stack exchange,提问作者Giacomo F
相关产品推荐
相关产品推荐

