2013-04-27 6 views
0

Я хочу обновить таблицу сотрудников на основе моей внешней таблицы, но я получил ORA-01427 ошибка, однорядные подзапрос возвращает более одной строкикак обновить таблицу из внешней таблицы

employee(emp_id, emp_name, job_history, city_code) 
ext_table(emp_name, job_history, city_name) 
city(city_code, city_name) 

данные в моем ext_table как следующее:

Sandy, waitress, los angeles 
Sandy, restaurant manager, los angeles 
John, store manager, phoenix 

update employee em 
set (em.emp_name, em.job_history, em.city_code) = 
    (select t.emp_name, t.job_history, t.city_code 
    from (select distinct(emp_name), job_history, c.city_code from 
      ext_table e, city c where e.city_name=c.city_name) t) 
    where em.emp_name=t.emp_name; 

Я очень ценю за любую помощь

ответ

1

Это то, что MERGE для:

merge into employee 
using 
(
    select e.emp_name, e.job_history, c.city_code 
    from ext_table e 
    join city c on e.city_name=c.city_name 
) t on (t.emp_name = employee.emp_name) 
when matched then update 
    set job_history = t.job_history, 
     city_code = t.city_code; 

Обратите внимание, что это бесполезно, чтобы обновить emp_name как это столбец, используемый для соединения между ext_table и employee.

Вышеупомянутое предполагает, что имя emp_name уникально в ext_table (и сотруднике). Если это не так, вам нужно будет найти «ключ», который однозначно идентифицирует сотрудника во внешней таблице.

также: distinct является НЕ функция.

select distinct (foo), bar абсолютно идентичен select distinct foo, bar. Он всегда работает на всех столбцов. Разница между ними совпадает с разницей между select (foo),bar и select foo, bar.

-2

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

ОБНОВЛЕНИЕ сотрудник SET job_history = B.job_history, city_code = C.city_code ОТ работнику, как внутреннее соединение ext_table AS B ON A.emp_name = B.emp_name INNER JOIN город КАК C на B. city_name = C.city_name

+0

Это не относится к Oracle. –

0

Другой возможной возможностью является преобразование внешней таблицы в обычную таблицу и обновление. Для преобразования внешнего в обычную таблицу используйте SQL Developer. Шаги: 1. Создайте пустой стол с той же структурой, что и внешняя таблица. 2. Экспортировать данные из внешнего в рег. Таблица. Этот процесс похож на экспорт данных из файла в Excel.

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