Mysql 从单个“一体式员工”表中返回大于经理工资的员工工资
我是sql旅程的新手,遇到了一个问题,我想返回工资高于经理的员工,只有一个表, 存在具有唯一id的员工Mysql 从单个“一体式员工”表中返回大于经理工资的员工工资,mysql,sql,database,Mysql,Sql,Database,我是sql旅程的新手,遇到了一个问题,我想返回工资高于经理的员工,只有一个表, 存在具有唯一id的员工 我无法访问您的图像链接,但这里有一个简单的示例: 选择emp.name 来自员工emp 在emp.managerid=mgr.id和emp.salary>mgr.salary上内部加入员工经理 我会这样做: select e.* from employees e where e.salary > (select m.salary from employ
我无法访问您的图像链接,但这里有一个简单的示例:
选择emp.name
来自员工emp
在emp.managerid=mgr.id和emp.salary>mgr.salary上内部加入员工经理
我会这样做:
select e.*
from employees e
where e.salary > (select m.salary
from employees m
where m.id = e.employee_id
);
. . 在这种情况下,
左连接绝对是免费的。为什么?你能解释一下吗。嗯,如果没有匹配的管理器,就没有太多的比较了。一般来说,加入一个没有选择数据的表是没有意义的。在您的例子中,情况是混乱的,因为尽管您编写了“LEFT JOIN”,但您的查询实际上执行了一个内部连接。这是因为WHERE子句在左侧联接表上包含一个比较运算符。为了证明它执行了左连接,您可以执行EXPLAIN EXTENDED[your quey],后跟SHOW WARNINGS;是的,你们是对的。我将其更改为内部
连接。谢谢你的提示。这是一种更简单的查询我想要的数据的方法,我想知道使用联接是否比这种方法有任何优势,反之亦然?@RaviKhatri。从性能的角度来看,两者应该是可比较的,因此这是一个选择的问题。