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

SQL中FROM子查询与WHERE IN子查询的结果差异问题

两条SQL语句的差异说明

核心逻辑差异

两条SQL的统计对象完全不同,是结果不一致的根本原因:

  • 第一条SQL的执行逻辑:
    先通过三表关联过滤出所有手机号符合匹配规则的人员对应的城市记录,后续分组统计的COUNT(*)是「每个城市下,符合手机号条件的人员总数量」,所有不符合手机号条件的记录都被提前过滤,结果符合你的预期。
  • 第二条SQL的执行逻辑:
    子查询仅筛选出「存在符合手机号条件人员的城市名单」,外层查询直接统计全量address表中属于这些城市的所有地址的总数量,完全不校验这些地址对应的人员是否满足手机号条件,最终统计的是「有符合条件人员的城市下,所有地址的总数量」,和你的统计目标不符。

示例验证

假设Prague城市共有100条address记录,其中仅10条对应的person关联的手机号符合匹配规则:

  • 第一条SQL返回Prague的统计值为10
  • 第二条SQL返回Prague的统计值为100

修正方案

如果要在第二种写法的基础上得到正确结果,不能仅用IN过滤城市维度,需要保留人员维度的过滤条件,或者将子查询改为关联条件而非IN过滤。


内容的提问来源于stack exchange,提问作者Pavel Václavík

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:48:05