在使用select嵌套查询时,当外层查询和内层查询使用到同一张表的别名的时候,就可能由于执行器优化导致执行顺序出现问题,从而出现不太符合常规的结果。
先看一个例子:
例子中有两张表,如下所示:
表 department:
表employee:
表结构和数据都比较简单,下面看一段SQL代码:
SELECT d.Name AS 'Department',
e.Name AS 'Employee',
e.Salary
FROM Employee e
JOIN Department d
ON e.DepartmentId = d.Id
WHERE
(
SELECT COUNT(p1.Salary)
FROM Employee p1
WHERE
p1.DepartmentId = e.DepartmentId
AND p1.salary > e.salary
) < 1