2016-06-25 5 views
1

Есть две таблицы рабочих мест и сотрудников. Я хочу сместить emloyees.first_name с jobs.job_title. wnen я сделать так:коррелированное обновление в oracle

update employees set first_name= (select distinct job_title from jobs,employees where employees.job_id=jobs.job_id) QL Ошибка: ORA-01427: однорядные подзапрос возвращает более одной строки больше появляться.

попытался сделать это с помощью курсора, но произошла такая же ошибка. Не могли бы вы рассказать мне, как обновлять многострочные строки на основе другой таблицы?

+1

Странно установить имя сотрудника на должность. Это действительно то, что вы хотите? – trincot

ответ

2

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

update employees 
    set first_name = (select job_title 
         from jobs 
         where employees.job_id = jobs.job_id 
        ); 

Установка первого имени в названии работы кажется странным, но это, кажется, намерение вашего запроса.

Я предполагаю, что job_id уникален для таблицы jobs, поэтому это должно устранить вашу проблему. Если нет, добавление and rownum = 1 гарантирует, что возвращается не более одной строки.

+0

И вообще вы хотите иметь «где существует», чтобы вы только обновляли строку в «employee», если в 'jobs' есть соответствующая строка. –

Смежные вопросы