You need to enable JavaScript to run this app. SQL两次关联同一张表查询时数据行缺失问题排查
优惠活动
大模型
产品
解决方案
定价
更多

SQL两次关联同一张表查询时数据行缺失问题排查

问题原因分析

你写的SQL存在两个核心问题:

  • 用了默认的INNER JOIN(简写为JOIN)关联两次表2,INNER JOIN本身就会把没有任何表2关联记录的用户直接排除,不会出现在结果中
  • 你把value_id的过滤条件写在了WHERE子句中,这要求用户必须同时存在value_id=1和value_id=2的两条关联记录才会被保留,只要缺其中任意一类城市的关联数据,整行用户记录都会被过滤,这就是id为2的Smith数据丢失的原因
修正后的写法
SELECT 
    a.id,
    a.name,
    b.value AS city_1,
    c.value AS city_2
FROM table1 AS a
LEFT JOIN table2 AS b ON a.id = b._id AND b.value_id = 1
LEFT JOIN table2 AS c ON a.id = c._id AND c.value_id = 2
修正逻辑说明
  • 把INNER JOIN替换为LEFT JOIN,会保留左表table1的全部4条用户记录,哪怕右表没有匹配的关联项,对应的城市字段会自动返回NULL,符合你的输出要求
  • 把value_id的过滤条件从WHERE移到对应LEFT JOIN的ON子句中,是在关联阶段就先过滤表2的分类,不会因为用户缺少某类城市的关联数据就被整行过滤

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 03:24:10