我正在尝试建立一个连接子查询,只返回收入低于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;
答案 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
);