2015-10-22 63 views
1

多個更新語句的正確方法我有2個表外面一列/字段是兩個表中一樣,我需要從表B. 這裏表斧值更新與數據表A需要被採取並且與Bw進行比較並且需要在Ax中更新當量Bz值x值從X1不同,X2等。因此,每個值需要被瓦特表B和等效Z值取和相比需要在X,X1,X2等在表A中進行更新什麼是減少甲骨文

Table A (columns j, x, x1,x2,x3..x20 and so on) 
--------- 

j x x1 x2 ..x20 and y y1 y2 .. y20 




Table B (columns w and z) 
-------- 
w z 



UPDATE TableA a SET a.x = (SELECT b.w 
     FROM TableB b 
     WHERE a.x = b.z) 
WHERE a.j='somevalue'; 

如果我這樣寫,我需要寫40更新語句,有沒有什麼簡單的方法來做這些更新。

與子查詢可能返回多行,我需要改進這一點。

感謝, 阿什拉夫

+0

你是說你有一大堆需要在表A和B同列? –

+0

一堆表A列的需要參照表B.表進行比較,因此,這裏比較即時與體重斧,然後取參考值BZ和更新它放回斧。因此,這裏斧,A.x1..A.x20需求與表B中的參考值進行比較和更新回到表格 – blackpanther

+0

乍一看,這看起來像一個可怕的數據庫設計。看起來x1,x2,...最好是行而不是列。無論如何,x1,x2等的更新會如何。 *完全*與x相同,所以我只是用x1替換x等。 –

回答

0

由於a.x具有作爲a.x1和a.x2,等你需要每門課程的價值一個子查詢,因爲它是你要找到不同硼記錄另一個值。

UPDATE TableA a 
SET a.x = (SELECT b.w FROM TableB b WHERE a.x = b.z) 
    , a.x1 = (SELECT b.w FROM TableB b WHERE a.x1 = b.z) 
    , a.x2 = (SELECT b.w FROM TableB b WHERE a.x2 = b.z) 
    ... 
WHERE a.j = 'somevalue'; 

您可能需要考慮更改tableA的表格設計,以使行具有值而不是列。這會使更新(以及關於這個問題的一般查詢)容易得多。

+0

謝謝! @ThorstenKettner – blackpanther