如何查询正确的结果

时间:2016-10-08 18:36:30

标签: mysql sql wamp innodb

我正在尝试建立一个连接子查询,只返回收入低于46000的员工姓名,我可以通过返回员工ID来获得它,但不是没有它。

这就是我这样做的方式。

Select e.eid, e.ename
From employee_table e
Inner Join (
Select salary, eid 
from salary
Where salary > 46000
) as s
On e.eid = s.eid;

2 个答案:

答案 0 :(得分:2)

这是因为您使用的是dinamic临时表,如果您没有选择eid列,您的临时dinamica表不包含此值,并且连接中的on子句失败

  Select e.eid, e.ename
  From employee_table e
  Inner Join (
      Select salary, eid 
      from salary
      Where salary < 46000
  ) as s
  On e.eid = s.eid;

你可以使用没有dinamic临时表的内连接

  Select e.eid, e.ename
  From employee_table e
  INNER JOIN salary s On e.eid = s.eid
  where s.salary < 46000

答案 1 :(得分:0)

因此,薪水不会存储在员工表中,而是存储在单独的薪资表中。工资表包含员工ID。这使得这是一个1:n的关系,即一个雇员可以有一个以上的工资。

我不知道你的桌子,所以我不知道原因。也许一个员工可以有很多工作,或者有部分工资,比如基本工资和额外的工资,或者有一个日期范围与工资一起存储,以表明它何时有效。我不知道。

让我们说,我们可以简单地添加员工的工资来获得总额。然后我们从员工表中选择员工姓名,我们在薪资表中找到薪水小于46000。

select ename
from employee
where eid in
(
  select eid
  from salary
  group by eid
  having sum(salary) < 46000
);