2011-01-14 11 views
1

で複数の値を持つ列を更新します。SQLは次のように私は、更新クエリを持っている単一のクエリ

update table TABLE1 set COL1 = 'X' where COL2 = 'Y' ---1 

サポートが値「X」と「Y」は今TABLE2データベースからフェッチされます。例えば。

select COL1, COL2 from TABLE2. ----2 

テーブルTABLE1の値をTABLE2から更新したいとします。

ただ、TABLE2は、値を次のようしていることを前提とし、それをより明確にする:

alt text

を使用すると、単一のクエリでこれを行うことで私を助けてください!

私はOracle 11gを使用しています。 Oracleの

+1

@Sandeepジンダル、あなたのRDBMSは何ですか? –

+0

http://decipherinfosys.wordpress.com/2007/01/31/update-data-in-one-table-with-data-from-another-table/ –

+1

あなたのRDBMSは何ですか? –

答えて

2

Oracleの場合、これは最も基本的ですそれを行う方法:

update TABLE1 
    set COL1 = (select TABLE2.COL1 from TABLE2 where TABLE2.COL2 = TABLE1.COL2) 
    where COL2 IN (select TABLE2.COL2 from TABLE2); 

TABLE1のすべての行に対して副問合せを実行できるため、非効率的な場合もあります。

主キーまたは両方の表にユニーク制約の宣言によって、あなたはおそらく、より効率的で更新可能インライン・ビュー方式を、使用することができる場合があります

update 
    (select TABLE1.COL1 as T1C1, TABLE1.COL2 as T1C2, TABLE2.COL1 as T2C1 
    from TABLE1 join TABLE2 on TABLE2.COL2 = TABLE1.COL2 
) 
    set T1C1 = T2C1; 
-3

MySQLの
UPDATE Table1 t1 
SET (X,Y) = (SELECT X,Y from Table2 WHERE ...YourConditions...) 
WHERE ... Another Conditions ... 

、SQLサーバ

UPDATE t1 
SET t1.X = t2, t2.Y = t2.Y 
FROM Table1 t1, Table2 t2 
WHERE t1.Something = t2.Something 
+2

MySQLの 'UPDATE'ステートメントに' FROM'節がありません。 –

+0

次のようにTABLE1を更新する必要があります。 テーブルを更新するTABLE1はCOL2 = 'X'のCOL1 = 'X'を設定します。両方の値(リスト)はTABLE2から集められます。 UPDATEテーブル1 t1 SET(X、Y)=(テーブル2のSELECT X、Y WHERE ... YourConditions ...) 「別の条件」がないと仮定します。この問合せは、TABLE2のすべての値を更新しないでしょうか(COL1の値だけでなく、TABLE2のCOL2と一致します)。 –

1
update TABLE1 
set TABLE1.COL1 = TABLE2.COL1 
from TABLE1 
join TABLE2 on TABLE1.COL2 = TABLE2.COL2 

(これは、SQL Server上で動作します)

+0

'table'キーワードがここでは重複しているとは思いませんか?' update table TABLE1 '? –

+0

@Janiはい、そうです。私は答えを更新します。 – Rockcoder

2

@Daveコスタの答えが正しいですかあなたがupdateステートメントに制限されている場合。しかし、私はこのような状況でmerge文を使用すると、私はもっと簡単な方法でこれを実行することを可能にすることを発見しました:

merge into TABLE1 
     using TABLE2 
     on (TABLE2.COL2 = TABLE1.COL2) 
when matched then 
    update set TABLE1.COL1 = TABLE2.COL1; 
関連する問題