【问题标题】:How do I subquery the right results如何子查询正确的结果
【发布时间】:2017-02-17 13:23:49
【问题描述】:

我正在尝试执行连接子查询以仅返回收入低于 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;

【问题讨论】:

  • 我会从<开始,而不是>
  • select e.eid, e.ename。如果你只想要名字,那么select e.ename

标签: mysql sql wamp innodb


【解决方案1】:

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

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

假设我们可以简单地将员工的工资相加得到总数。然后我们从employee表中选择员工姓名,我们在salary表中找到低于46000的薪水。

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

【讨论】:

    【解决方案2】:

    这是因为您使用的是动态临时表,如果您不选择 eid 列,您的临时动态表不包含此值,并且连接中的 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;
    

    你可以在没有动态临时表的情况下使用内部连接

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-03
      • 2020-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多