2016-06-25 10 views
1

2つの表のジョブと従業員があります。 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:複数の行がoccure単一行副問合せを返します。

カーソルで操作しようとしましたが、同じエラーがありました。 複数の行を別の表に基づいて更新する方法を教えてください。

+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を追加すると、最大で1行だけが返されます。

+0

そして、 'jobs'に対応する行があれば、' employees'の行だけを更新するように 'where exists'を設定するのが一般的です。 –