2017-09-22 8 views
1

テーブル上で700行を更新する必要があります。 1つのクエリでのみ実行できますか?複数の行を別のテーブルのデータで更新する

2例:

UPDATE PERSON p SET p.admin = (select usr.iqid from USER usr where usr.userid = 'J072') where upper(person.myid) = '18349'; 

UPDATE PERSON p SET p.admin = (select usr.iqid from USER usr where usr.userid = 'PU96') where upper(person.myid) = '36895'; 
+0

[Oracleの内部結合を使用した更新ステートメント]の複製が可能です(https://stackoverflow.com/questions/2446764/update-statement-with-inner-join-on-oracle) –

+0

詳細は、そこにありますか? 2つのテーブルを結合する方法?結合ロジックで2つのテーブルのDDLを指定できますか? –

+0

申し訳ありません.2つのテーブルperson.admin = user.iqidに参加することは可能です。 – lipdjo

答えて

1

私はこのように記述します。upper()は数字のために必要されていないことを

UPDATE PERSON p 
    SET p.admin = (SELECT u.iqid 
        FROM USER u 
        WHERE (u.userid = 'J072' AND p.myid = '18349') OR 
         (u.userid = 'PU96' AND p.myid = '36895') 
       ) 
    WHERE p.myid IN ('18349', '36895'); 

ノート。それは一般にインデックスの使用を妨げるでしょう。

+0

それは動作します。ありがとう – lipdjo

0

オプション1

update person p 
    set p.admin  = 
      (select usr.iqid 
      from user usr 
      where usr.userid = decode(upper(person.myid), '36895', 'PU96', '18349', 'J072')) 
where upper(person.myid) = any ('36895', '18349'); 

オプション2 使用相関スカラサブクエリを回避するために文をマージします。

オプション3 Update (select ... from person join user) set ...人が外部キー参照ユーザーを持っている場合。 Google「キーpresernedビュー」。