sql嵌套查询说明

qv7cva1a  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(305)

我在一次竞赛中遇到了这个sql查询。
表:员工

+------+------+--------+--------+
| ID   | Name | Salary | Branch |
+------+------+--------+--------+
|    1 | e1   |  10000 | cse    |
|    2 | e2   |  20000 | ece    |
|    3 | e3   |  12000 | ece    |
|    4 | e4   |  25000 | eee    |
|    5 | e5   |  15000 | ece    |
+------+------+--------+--------+

查询:

select * from Employees as e1 where e1.Branch="ece" and (select count(*) from Employees as e2 where e2.Branch="ece" and e1.Salary > e2.Salary) >= 2;

我得到的结果是:

+------+------+--------+--------+
| ID   | Name | Salary | Branch |
+------+------+--------+--------+
|    2 | e2   |  20000 | ece    |
+------+------+--------+--------+

我不明白为什么我得到这个输出。我猜可能是给了布兰奇公司的员工最高工资。对这个问题作些解释会有帮助的。

fjaof16o

fjaof16o1#

这是一个例子 Correlated Subquery 其中内部查询和外部查询同时执行

select * from Employees as e1 
    where e1.Branch="ece" and 
       (
          select count(*) from Employees as e2 where 
                e2.Branch="ece" and e1.Salary > e2.Salary
       ) >= 2;`

对于外部查询的每一行,比较内部查询中的结果和用于从外部查询中获取最终结果的内部查询的结果。

相关问题