SQL:为什么这两个 sql 查询结果不同,谢谢各位赐教。

307 天前
 jason31415926
第一个查询:
SELECT d.name Department, e.name Employee, e.salary Salary
FROM Employee e LEFT JOIN department d
ON e.departmentId = d.id
WHERE (d.id,e.salary) IN
(
SELECT departmentId ,max(salary)
FROM Employee
GROUP BY departmentId;
);

第二个查询:
SELECT d.name Department, e.name Employee, e.salary Salary
FROM Employee e LEFT JOIN department d
ON e.departmentId = d.id
WHERE (d.id,e.salary) IN
(
SELECT e.departmentId ,max(e.salary)
FROM Employee
GROUP BY e.departmentId;
);
1045 次点击
所在节点    问与答
3 条回复
liprais
307 天前
执行计划看了么
第二个 in 里面的 e 去掉就一样了
dw2693734d
307 天前
两个 SQL 查询之间的主要区别在于子查询中的 SELECT 语句:

第一个查询:SELECT departmentId ,max(salary) FROM Employee GROUP BY departmentId;
第二个查询:SELECT e.departmentId ,max(e.salary) FROM Employee GROUP BY e.departmentId;
实际上,从逻辑上看,这两个子查询是等价的。它们都是从 Employee 表中选择 departmentId 和该部门中的最高工资( max(salary)),并按 departmentId 进行分组。

因此,如果两个查询返回的结果不同,那可能是由于其他因素引起的,比如数据的不同或数据库引擎的特定行为。但根据这两个 SQL 语句本身,它们应该返回相同的结果。
c6h6benzene
307 天前
是结果不同,还是结果的顺序不同?你两个 except 一下看看能不能找出区别。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/969005

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX