如何子查询正确的结果
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
);
我正在尝试对 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.
中找到薪水低于46000select ename
from employee
where eid in
(
select eid
from salary
group by eid
having sum(salary) < 46000
);