SQL JOIN关联两张表返回远多于预期行数问题排查求助
错误原因
关联条件逻辑错误
你写的查询中JOIN的关联条件为a.EndUserID = a.EndUserID,该条件恒成立,相当于没有设置任何关联限制,最终会生成两张表的笛卡尔积:Alerts表的每一行都会和Demographics表的所有行依次匹配,最终返回的总数据量为22078 * 1857,远超过预期行数。这也是为什么EndUserID为119的59条告警记录,最终返回了数百条结果、且PIN值全部错乱的核心原因。连接类型不符合需求
你使用的默认JOIN是内连接(INNER JOIN),仅会返回两张表EndUserID匹配上的记录,Alerts中存在但Demographics中不存在的EndUserID对应的告警记录会被直接过滤,无法得到你预期中匹配不到时返回NULL的结果。
正确查询写法
SELECT a.AlertID, a.EndUserID, b.PIN FROM alerts a LEFT JOIN Demographics b ON a.EndUserID = b.EndUserID;
该查询使用左连接保留Alerts表的全部记录,关联条件改为两张表的EndUserID字段匹配:匹配成功返回对应PIN,匹配失败时PIN字段自动返回NULL,完全符合你的预期输出要求。
内容的提问来源于stack exchange,提问作者Pratik Choudhary
相关产品推荐
相关产品推荐

