MySQL 具有别名的相关子查询

MySQL correlated subqueries with aliases

你好,我不明白相关子查询在幕后是如何工作的。我有两个 table,如果第一个 table 的某个值等于第二个 table 的某个值,我想检查两个值是否相等,如果第二个值的某个值相等。 我的代码是:

SELECT first_name, last_name, salary 
FROM employees 
WHERE employees.salary = (SELECT min_salary
FROM jobs
WHERE employees.job_id = jobs.job_id);

在外部查询中比较薪水时,它如何知道 job_id 是否对员工对象正确? 它是否遍历每个值并将值传递给 alias.Object?

假设内部查询的值为 2500。如果有员工的收入为 2500,但 min_salary 他的 job_id 为 2000 怎么办?此查询如何知道何时正确或错误?

如果有人需要更多详细信息,那么这里会更好地解释一切: https://www.w3resource.com/mysql-exercises/subquery-exercises/find-the-names-salary-of-the-employees-whose-salary-is-equal-to-the-minimum-salary-for-their-job-grade.php

WHERE子句对tableemployees中的每一行执行一次。

What if there is employee who earn 2500 but min_salary for his job_id would be 2000?

对于这种情况,子查询:

SELECT min_salary FROM jobs WHERE employees.job_id = jobs.job_id 

将 return 2000 并且 WHERE 子句中的布尔表达式将为 FALSE 因为 2500 <> 2000 并且该员工将从结果。

employeesjobs的每一行之间的link是第job_id列。

对于 employees 中的每个 job_id,table jobs 被一次又一次地扫描以获取相应的 min_salary 和这个值(必须是unique 并且我假设它在一个名为 jobs 的 table 中是唯一的)与 employees 的列 salary 进行比较。

这个查询也可以通过 INNER 连接来实现,我相信它更清楚发生了什么:

SELECT e.first_name, e.last_name, e.salary 
FROM employees e INNER JOIN jobs j
ON j.job_id = e.job_id AND j.min_salary = e.salary;

既然您在问题中提到了别名,请使用它们来限定所有列,即使您知道对于某些列没有其他同名的列也是如此。还可以使用短别名使代码更短、更易读。