You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Left Join返回行数少于左表查询结果?问题排查

左连接结果行数少于左表的原因及解决办法

问题根源

你在LEFT OUTER JOIN后的WHERE子句中加入了对右表position_data4.hour的过滤条件:

AND position_data4.hour >= 1677628800 
AND position_data4.hour <= 1677632400

当左表的行在右表中找不到匹配记录时,右表的所有字段(包括hour)都会返回NULL。而NULL参与比较运算时结果为FALSE,这部分行就会被WHERE条件直接过滤掉,最终导致结果行数远少于左表的查询结果。

修正方案

要保留左表所有符合条件的行,需将对右表的过滤条件移至ON子句中,而非WHERE子句:

SELECT 
  COUNT (*) 
FROM 
  state_vectors_data4 
  LEFT OUTER JOIN position_data4 ON (
    state_vectors_data4.lastcontact = position_data4.maxtime 
    AND state_vectors_data4.icao24 = position_data4.icao24
    AND position_data4.hour >= 1677628800 
    AND position_data4.hour <= 1677632400
  )
WHERE 
  state_vectors_data4.time >= 1677628800 
  AND state_vectors_data4.time < 1677628810
  AND state_vectors_data4.hour >= 1677628800 
  AND state_vectors_data4.hour <= 1677632400 
  AND state_vectors_data4.lat > 22.707434526056968 
  AND state_vectors_data4.lat < 71.83985097021925 
  AND state_vectors_data4.lon < -49.97631795370285 
  AND state_vectors_data4.lon > -168.4528775341493;

修改后,右表的过滤条件会在连接阶段生效,左表中没有匹配右表条件的行依然会被保留(右表字段显示为NULL),最终计数结果会和单独查询左表的结果一致。

内容的提问来源于stack exchange,提问作者Andrews D

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 09:13:09