题目
一、大概思路
因为我们需要取两次信息,所以我们把它AS成两个表。
二、代码实现
SELECT
a.name AS 'Employee'
FROM
Employee AS a,
Employee AS b
WHERE
a.ManagerId = b.Id
AND a.Salary > b.Salary
;
SELECT
a.NAME AS Employee
FROM Employee AS a JOIN Employee AS b
ON a.ManagerId = b.Id
AND a.Salary > b.Salary
;
或者直接用join把两个表连起来
总结
总体还是比较简单。
看到评论区一个比较有意思的
SELECT
a.NAME AS 'Employee'
FROM Employee AS a LEFT JOIN Employee AS b
ON a.ManagerId = b.Id
AND a.Salary > b.Salary
;
这里需要注意一个点,ON是生成临时表的时候用的条件,而WHERE是临时表已经生成之后再过滤得到的。它不管on中的条件是否为真,都会返回左边表中的记录。 on 后面跟and条件,先会在右边表中对and条件进行过滤,然后再跟左边主表进行关联。
所以说这里的AND应该改成WHERE就好了
总的来说,就是ON是在join之前进行的,而WHERE是在JOIN之后进行的