“嵌套查询结果不对”是一个非常常见、但原因很多的问题。要准确帮你定位,最好贴出 SQL 语句 + 表结构 + 期望结果 + 实际结果。不过我可以先给你总结 最常见的几类原因,你可以对照看看。
SELECT *
FROM A
WHERE id = (SELECT id FROM B);
如果子查询返回 多行,会报错或结果异常。
✅ 正确写法:
WHERE id IN (SELECT id FROM B);
SELECT *
FROM A
WHERE col NOT IN (
SELECT col FROM B
);
如果子查询里 有 NULL,整个 NOT IN 结果会是空。
✅ 建议改成:
WHERE NOT EXISTS (
SELECT 1 FROM B WHERE B.col = A.col
);
SELECT dept_id, name, MAX(salary)
FROM emp;
这样结果会“看起来不对”。
✅ 正确:
SELECT dept_id, MAX(salary)
FROM emp
GROUP BY dept_id;
SELECT *
FROM A
WHERE id IN (
SELECT id FROM B WHERE B.dept = 10
);
但你本来想关联 A.dept = B.dept。
✅ 应该用关联子查询:
SELECT *
FROM A
WHERE EXISTS (
SELECT 1 FROM B
WHERE B.dept = A.dept AND B.id = A.id
);
SELECT *
FROM (
SELECT * FROM A ORDER BY time DESC
);
子查询里的 ORDER BY 不一定生效,除非外层也排序。
例如想取每个人最新记录,却写成:
SELECT *, MAX(time)
FROM A
GROUP BY user_id;
✅ 正确常用写法:
SELECT *
FROM A a
WHERE time = (
SELECT MAX(time)
FROM A b
WHERE b.user_id = a.user_id
);
'' ≠ NULL'' = NULL
这会导致嵌套查询结果不同。请贴:
我可以一步到位指出是哪一条导致的。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。