使用oracle中的Subquery更新列

时间:2018-05-15 14:52:12

标签: sql oracle

我在下面有一个EMPLOYEE表:

EMP_ID     DEPT_ID
101        1
102        2
103        3
104        1

和DEPARTMENT表格如下:

DEPT_ID  COUNTS
1   
2   
3   

我想编写一个查询,该查询将计算属于某个部门的Employee数量并将其存储到Department列表中,以便Department表格如下所示:

DEPT_ID  COUNTS
1         2
2         1
3         1

解决方案是

update department p
    set counts = (select count(*) from EMPLOYEE e where p.dept_id = e.dept_id);

但我真的不明白它在内部是如何工作的。它如何知道DEPARTMENT中必须设置哪些部门ID。该子查询究竟返回"从EMPLOYEE e中选择count(*),其中p.dept_id = e.dept_id"

1 个答案:

答案 0 :(得分:0)

这称为相关子查询:

这是您的查询:

update department p
set counts = (select count(*) from EMPLOYEE e where p.dept_id = e.dept_id); 

因此,内部查询基于外部查询执行(即具有department表)。如果,您的外部查询总共有3条记录,则内部查询(即具有EMPLOYEE表)将执行三次。

在您的方案中,您已使用dept_id从外部查询映射查询,因此这将查找内部查询(即EMPLOYEE表)并根据dept_id获取计数。