SQL多表关联比对异常:查询结果不符合预期问题排查
排查SQL内连接结果异常的常见原因
以下是导致你得到的异常结果远多于预期的几个核心排查方向:
重复记录引发笛卡尔积
两张表中如果存在同一Employee Code+日期的重复行,内连接后会生成多条组合记录,把单条异常拆成多条,直接拉高异常数。先分别检查两张表的重复情况:-- 检查ZPAY_VIEW_ACTIVITIES_TO_TABLEAU的重复数据 SELECT "Employee Code", 日期字段, COUNT(*) FROM ZPAY_VIEW_ACTIVITIES_TO_TABLEAU GROUP BY "Employee Code", 日期字段 HAVING COUNT(*) > 1; -- 检查elhm_bpn_2024的重复数据 SELECT "Employee Code", 日期字段, COUNT(*) FROM elhm_bpn_2024 GROUP BY "Employee Code", 日期字段 HAVING COUNT(*) > 1;如果有重复,需要先去重再做比对,或者在连接时用聚合函数(比如
MAX())取唯一的BLOCK_LAPANGAN/Blok值。日期字段精度不匹配
若一张表的日期是带时分秒的datetime类型,另一张是仅存年月日的date类型,直接用等号连接会因为时间部分差异,把同天不同时间的记录判定为不同日期,导致本该匹配的记录没连上,反而生成多余异常。
修复时统一日期精度:CAST(zpay.日期字段 AS DATE) = CAST(elhm.日期字段 AS DATE)字段值的格式差异
比如BLOCK_LAPANGAN是A01,Blok是a01或者A01(带尾空格),直接用=比较会被判定为不一致。可以用统一格式后再比对:TRIM(UPPER(zpay.BLOCK_LAPANGAN)) = TRIM(UPPER(elhm.Blok))连接条件错误或遗漏
确认你的连接条件是否仅包含Employee Code和日期,有没有误加其他无关字段,或者漏了必要的匹配维度——比如是否存在同一员工同一天对应多个场地的业务场景,需要额外的字段来精准匹配。
内容的提问来源于stack exchange,提问作者Fachry Dzaky
相关产品推荐
相关产品推荐

