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;

我非常感谢任何帮助

4

3 回答 3

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_tableemployee

以上假设 emp_name 在ext_table(和雇员)中是唯一的。如果不是这种情况,您将需要在外部表中找到一些唯一标识员工的“键”。

另外:distinct不是函数

select distinct (foo), bar与 绝对相同select distinct foo, bar。它始终在所有列上运行。两者的区别与select (foo),bar和的区别相同select foo, bar

于 2013-04-27T16:41:20.900 回答
0

另一种可能的选择是将外部表转换为常规表并更新。要将外部表转换为常规表,请使用 SQL Developer。步骤: 1.创建与外部表结构相同的空表。2.Export数据从外部到reg。桌子。该过程类似于将数据从文件导出到 Excel。

于 2013-04-29T18:00:24.693 回答
-2

您可以通过使用带有 join 的更新查询来做到这一点。检查以下代码

UPDATE employee SET job_history = B.job_history , city_code = C.city_code FROM EMPLOYEE as A INNER JOIN ext_table AS B ON A.emp_name = B.emp_name INNER JOIN city AS C ON B.city_name = C.city_name

于 2013-04-27T20:08:13.910 回答