BigQuery中基于字段条件筛选后追加另一表记录的实现方法
在BigQuery中合并表并排除指定行
你可以通过两种方式实现需求:在t2的查询中过滤掉那些column2存在于t1中column1='X'对应的column2集合里的行。
方法一:使用NOT IN子查询
直接在t2的SELECT语句后添加WHERE条件,排除符合条件的行:
SELECT t1.column1, t1.column2, t1.column3 FROM `project.database.table1` as t1 UNION ALL SELECT t2.column1, t2.column2, t2.column3 FROM `p21-project.database.table2` as t2 WHERE t2.column2 NOT IN ( SELECT column2 FROM `project.database.table1` WHERE column1 = 'X' )
方法二:使用LEFT JOIN排除匹配行
通过LEFT JOIN关联t2和t1中符合条件的行,只保留没有匹配到的t2行:
SELECT t1.column1, t1.column2, t1.column3 FROM `project.database.table1` as t1 UNION ALL SELECT t2.column1, t2.column2, t2.column3 FROM `p21-project.database.table2` as t2 LEFT JOIN ( SELECT DISTINCT column2 FROM `project.database.table1` WHERE column1 = 'X' ) as filter_t1 ON t2.column2 = filter_t1.column2 WHERE filter_t1.column2 IS NULL
说明
- 两种方法都能实现需求,若
t1中column1='X'对应的column2有重复值,方法二中的DISTINCT可以减少关联次数,提升性能。 - 注意替换语句中的
'X'为实际需要匹配的具体值。
内容的提问来源于stack exchange,提问作者Giacomo F
相关产品推荐
相关产品推荐

