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

MySQL三表INNER JOIN返回0条数据,两表连接正常,求排查原因

问题原因分析

背景回顾

表结构:

  • 表a:仅包含id字段
  • 表b:包含id、c_id两个字段
  • 表c:仅包含id字段

已知a.id和b.id存在匹配数据,且以下两个两表关联查询均能正常返回结果:

-- a与b关联,返回匹配的行
SELECT 
    *
FROM
    a
INNER JOIN
    b ON a.id = b.id
;

-- b与c关联,返回匹配的行
SELECT 
    *
FROM
    b
INNER JOIN
    c ON c.id = b.c_id
;

但执行三表关联查询时返回0条数据:

SELECT 
    *
FROM
    a
INNER JOIN
    b ON a.id = b.id
INNER JOIN
    c ON c.id = b.c_id
;

核心原因

没有任何一行b表数据,同时满足两个关联条件:

  • 该b行的id能在a表中找到匹配项(符合第一个JOIN条件);
  • 该b行的c_id能在c表中找到匹配项(符合第二个JOIN条件)。

换句话说:

  • 和a表匹配的那些b行,它们的c_id全不在c表中;
  • 和c表匹配的那些b行,它们的id全不在a表中。

两个两表查询各自能返回数据,但它们的结果集没有交集,因此三表INNER JOIN(取三个表的共同交集)自然返回0条数据。

举个具体的例子:

  • a表id:[1, 2, 3]
  • b表数据:(1, 4), (2, 5), (3, 6), (7, 7), (8, 8)
  • c表id:[7, 8]

此时:

  • 第一个两表查询返回b表中id为1、2、3的行,但这些行的c_id(4、5、6)都不在c表中;
  • 第二个两表查询返回b表中id为7、8的行,但这些行的id(7、8)都不在a表中;
  • 三表关联时找不到同时满足两个条件的行,所以返回0条数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 00:20:56