在 SQL 中,INNER JOIN 结果比预期少,通常是因为它只返回两边表都能匹配上的记录。只要任一边的条件不满足,行就会被丢弃。下面按常见原因逐一说明:
A.id = B.aid
如果 A.id 或 B.aid 有 NULL:
NULL = NULL 不成立✅ 检查:
SELECT * FROM A WHERE id IS NULL;
SELECT * FROM B WHERE aid IS NULL;
例如:
A.id 是 INTB.aid 是 VARCHAR('1')某些数据库会隐式转换,但可能不匹配或效率极低,导致“看似没数据”。
✅ 检查:
DESC A;
DESC B;
比如:
1,2,32,3→ INNER JOIN 只会返回 2,3
✅ 对比:
SELECT id FROM A
EXCEPT
SELECT aid FROM B;
SELECT *
FROM A
JOIN B ON A.id = B.aid
WHERE B.status = 1;
如果很多 B 行 status ≠ 1,结果自然变少。
✅ 建议:先去掉 WHERE,看 JOIN 本身结果。
如果:
INNER JOIN 会放大 A 的行数
反之,如果 B 没有匹配,A 会消失
如果你希望左表全保留,应使用:
LEFT JOIN
而不是 INNER JOIN。
如:
' ABC' vs 'ABC'-- 看左表有多少没匹配上
SELECT A.*
FROM A
LEFT JOIN B ON A.id = B.aid
WHERE B.aid IS NULL;
如果你愿意,可以把:
发出来,我可以直接帮你定位是哪一种原因。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。