如何子查询正确的结果

How do I subquery the right results

我正在尝试对 return 仅收入低于 46000 的员工姓名进行连接子查询,我也可以通过 returning 员工 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;

这是因为您使用的是动态临时 table,如果您不使用 select eid 列,您的临时动态 table 不包含此值和 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;

您可以使用没有动态临时的内部连接 ​​table

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

所以工资没有存储在员工 table 中,而是存储在单独的工资 table 中。薪水 table 包含员工 ID。这使得这是一个 1:n 关系,即一个员工可以有多个薪水。

我不知道你的table,所以我不知道这是什么原因。也许一个员工可以有很多工作,或者有部分工资,比如基本工资和额外工资,或者有一个日期范围与工资一起存储以指示它何时 is/was 有效。我不知道。

比方说,我们可以简单地添加员工的薪水以获得总数。然后我们select员工姓名从员工table那里我们在薪水table.

中找到薪水低于46000
select ename
from employee
where eid in
(
  select eid
  from salary
  group by eid
  having sum(salary) < 46000
);