Sql 在oracle中使用子查询更新列

Sql 在oracle中使用子查询更新列,sql,oracle,Sql,Oracle,我有一个员工表如下: EMP_ID DEPT_ID 101 1 102 2 103 3 104 1 以及一个部门表,如下所示: DEPT_ID COUNTS 1 2 3 我想编写一个查询,计算属于某个部门的员工人数,并将其存储到department列表中,这样department表将如下所示: DEPT_ID COUNTS 1 2 2 1 3 1 解决办法是

我有一个员工表如下:

EMP_ID     DEPT_ID
101        1
102        2
103        3
104        1
以及一个部门表,如下所示:

DEPT_ID  COUNTS
1   
2   
3   
我想编写一个查询,计算属于某个部门的员工人数,并将其存储到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);
但我真的不明白它在内部是如何工作的,它如何知道它必须设置部门中的哪个部门ID计数。此子查询究竟返回什么“从员工e中选择计数(*),其中p.dept\u id=e.dept\u id”

这称为相关子查询:

这是您的查询:

update department p
set counts = (select count(*) from EMPLOYEE e where p.dept_id = e.dept_id); 
因此,内部查询将基于外部查询(即has
department
table)执行。如果外部查询总共有3条记录,那么内部查询(即has
EMPLOYEE
table)将执行三次


在您的场景中,您已经从外部查询映射了带有
dept\u id
的查询,因此这将查找内部查询(即
EMPLOYEE
表),并根据
dept\u id
获取计数

谷歌“相关子查询”为什么使用mysql标签?