Обновите столбец, используя Subquery в oracle - PullRequest
0 голосов
/ 15 мая 2018

У меня есть таблица сотрудников ниже:

EMP_ID     DEPT_ID
101        1
102        2
103        3
104        1

И таблица DEPARTMENT как:

DEPT_ID  COUNTS
1   
2   
3   

Я хочу написать запрос, который бы подсчитывал количество сотрудников, принадлежащих отделу, и сохранял его в таблице столбцов отдела, чтобы таблица отдела выглядела следующим образом:

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);

Но я действительно не понимаю, как это работает внутри. Как он узнает, какие отделы в отделе должны устанавливать счетчики? что именно возвращает этот подзапрос "select count (*) из EMPLOYEE e, где p.dept_id = e.dept_id"

1 Ответ

0 голосов
/ 15 мая 2018

Это называется коррелированный подзапрос:

Это ваш запрос:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...