我想根据外部表更新员工表,但是我收到了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;
我非常感谢任何帮助
答案 0 :(得分: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
NOT 一个函数。
select distinct (foo), bar
与select distinct foo, bar
完全相同。它始终在所有列上运行。两者之间的差异与select (foo),bar
和select foo, bar
之间的差异相同。
答案 1 :(得分:0)
另一种可能的选择是将外部表转换为常规表并进行更新。要将外部转换为常规表,请使用SQL Developer。步骤:1。使用与外部表相同的结构创建空表。 2.从外部向reg输出数据。表。该过程类似于将数据从文件导出到Excel。
答案 2 :(得分:-2)
您可以通过使用连接更新查询来完成此操作。检查以下代码
更新员工SET job_history = B.job_history,city_code = C.city_code FROM EMPLOYEE作为内部联接ext_table AS B ON A.emp_name = B.emp_name INNER JOIN city AS C ON B.city_name = C.city_name