BigQuery按两列组合条件过滤指定行时SQL结果异常排查
错误原因
- 现有SQL的过滤逻辑仅关联
column1字段,未绑定年份字段column2,导致只要某个column1值在2020年或2021年的待排除列表中出现过,该值对应所有年份的行都会被过滤,而非仅删除指定年份的目标行。 - 例如你需要排除的是2020年的
2 - K和2021年的2 - K共2行,但现有逻辑会把所有年份的2 - K行全部删除,最终过滤行数自然远大于预期的8行。
修复方案
推荐使用NOT EXISTS实现精准的多条件匹配过滤,兼容性更强:
SELECT * FROM xx.yy.zz t1 WHERE NOT EXISTS ( SELECT 1 WHERE t1.column1 IN ('2 - K','3 - K','19-1 - K','33 - K') AND t1.column2 = 2020 OR t1.column1 IN ('304 - K','303 - K','2 - K','3 - K') AND t1.column2 = 2021 )
如果你的数据库支持多列IN操作,也可以使用如下写法:
SELECT * FROM xx.yy.zz WHERE (column1, column2) NOT IN ( ('2 - K', 2020), ('3 - K', 2020), ('19-1 - K', 2020), ('33 - K', 2020), ('304 - K', 2021), ('303 - K', 2021), ('2 - K', 2021), ('3 - K', 2021) )
内容的提问来源于stack exchange,提问作者KayEss
相关产品推荐
相关产品推荐

