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常にすべての列で動作します。2 つの違いは、 と の違いと同じselect (foo),barですselect foo, bar

于 2013-04-27T16:41:20.900 に答える
0

別の可能なオプションは、外部テーブルを通常のテーブルに変換して更新することです。外部を通常のテーブルに変換するには、SQL Developer を使用します。手順: 1. 外部テーブルと同じ構造の空のテーブルを作成します。2.外部から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 に答える