子查询不返回相同的行数

时间:2021-05-05 21:44:19

标签: mysql

我正在学习 MySQL。我不明白为什么这两个查询返回不同的结果。

这将返回 94696 个结果

select count(*) from salaries where salary > 100000;

这将返回 254687 个结果

select count(*) from salaries where emp_no 
in (select emp_no from salaries where salary > 100000);

这两个查询当然是等价的,应该返回相同的行数。我错过了什么?

2 个答案:

答案 0 :(得分:3)

在不知道“Salaries”表的内容的情况下,在第一个查询中,您要求的是薪水高于 100000 的薪水行数(会很好)。

然而,在第二个中,您要求所有工资至少超过 100000 的 emp_no(我假设员工编号)。这意味着如果给定的 emp_no 可以有多个工资,那么您将计算所有其中。

这是我的意思的一个简单示例,请考虑以下工资表:

<头>
emp_no 工资
123 100001
123 99999

第一个查询将只返回第一行,这意味着 count(*) 将为 1。

然而,第二个查询是通过 emp_no 在表中搜索。内部查询只返回一个emp_no(第一行的那个),但是现在外部查询是这样的

select count(*) from salaries where emp_no in (123) --that's the result of the inner query

那总共会返回 2。

答案 1 :(得分:0)

后一个查询将返回所有薪水超过 100000 的 emp_nos 的计数。因此,如果 emp_no 123 有薪水 99999 和薪水 100000 的行,它将在第一个查询中计为 1,在第二个查询中计为 2查询。

相关问题