Oracle-UPDATE FROMの説明

1863 ワード

テーブルの更新操作では、更新するテーブル以外のデータを式で参照する必要がある場合が多い.sql serverがupdateを提供するfrom句のように、更新するテーブルを他のデータソースに接続できます.1つのテーブルのみを更新できますが、更新するテーブルを他のデータソースに接続することで、updateの式で更新するテーブル以外のデータを参照できます.例:
UPDATE Table2

SET Table2.ColB = Table2.ColB + Table1.ColB

FROM Table2 

INNER JOIN Table1 

ON (Table2.ColA = Table1.ColA);

実際の更新操作は、from句によって形成される新しい結果セットではなく、更新するテーブルで行われます.Oracleにはupdate from構文がありません.同じ機能を2つの方法で実現できます.
サブクエリUPDATE A SET A.NAME=(SELECT B.NAME FROM B WHERE B.ID=A.ID)このクエリは、状況に応じて次のように変化するかどうかを確認します.
  
単例:UPDATE A SET A.NAME=(SELECT B.NAME FROM B WHERE B.ID=A.ID)WHERE A.ID IN(SELECT ID FROM B)多例:UPDATE order_rollup SET(qty,price)=(SELECT SUM(qty),SUM(price) FROM order_lines WHERE customer_id='KOHL' )WHERE cust_id='KOHL' AND order_period=TO_DATE('01-Oct-2000')は、ビューと組み合わせて使用することもできます.
  
3つの注意点があります:1.指定されたa.keyfieldの値に対して、SELECT b.fieldsource FROM tableb b WHERE a.keyfield=b.keyfieldの値は一意の値であり、多値ではない.  2. ほとんどの場合、最後尾のwhere EXISTS句が重要です.そうしないと、誤った結果が得られます.  3. ビュー更新の制限:ビューが複数のテーブルの接続に基づいている場合、ユーザーがビューレコードを更新する能力が制限されます.updateが1つのテーブルにのみ関連し、ビュー列に更新されたテーブルのプライマリ・キー全体が含まれている場合を除き、ビューのベース・テーブルは更新できません.
 
切断元:http://www.cnblogs.com/JasonLiao/archive/2009/12/23/1630895.html