我在下面有一个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"
答案 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
获取计数。