BigQuery左连接使用OR关联两邮箱字段报错的正确实现方案
报错原因
多数SQL引擎不支持在LEFT JOIN的关联条件中直接使用OR拼接多组等值条件,引擎无法识别这种非标准的外连接关联规则,因此触发该异常。
正确实现方案
推荐使用两次等值LEFT JOIN的方式实现需求,既可以满足第一个邮箱字段优先关联的要求,也兼容所有支持标准SQL的引擎:
SELECT a.*, -- 优先取address1匹配到的b表数据,匹配失败则取address2的匹配结果 COALESCE(b1.email, b2.email) AS matched_email, COALESCE(b1.其他需要的b表字段, b2.其他需要的b表字段) AS 自定义字段别名 -- 其余需要返回的b表字段均按照上述格式优先取b1的返回值即可 FROM a LEFT JOIN b b1 ON a.address1 = b1.email LEFT JOIN b b2 ON a.address2 = b2.email -- 过滤两次关联均未匹配的条目 WHERE b1.email IS NOT NULL OR b2.email IS NOT NULL
方案说明
- 第一次关联
b表别名设置为b1,用address1做等值关联,拿到第一优先级的匹配结果 - 第二次关联
b表别名设置为b2,用address2做等值关联,拿到第二优先级的匹配结果 - 用
COALESCE函数优先返回b1的字段值,b1无匹配时自动取b2的字段值 - 最后的
WHERE条件直接过滤掉两次关联都没有匹配结果的行,完全符合需求要求
内容的提问来源于stack exchange,提问作者Luiscri
相关产品推荐
相关产品推荐

