2013-08-21 90 views
0

我無法弄清楚如何解決這個問題。 我有一個表(A)我需要更新,具有這樣的結構:具有相同結構mysql交叉更新表

CODE VALUE 
1  a 
2  null 
3  null 
etc... 

然後,我有另一個表(B),但與每一個值集合:

CODE VALUE 
1  a 
2  b 
3  c 

我需要做的是將表B中的數據複製到表A,其中A.CODE = B.CODE,但只有在未設置A.VALUE時。 這樣做最好的查詢是什麼?由於我正在處理2000個行,因此無法手動完成。提前

update A set VALUE = 
    (select b.VALUEfrom B b, A a where b.CODE = a.CODE) 

感謝:

我寫了這樣的事情,但它似乎並沒有工作!

回答

2
UPDATE a SET a.Value = b.Value 
FROM TableA a 
INNER JOIN TableB b ON (a.CODE = b.CODE) 
WHERE a.VALUE IS NULL 
+0

我認爲你的意思是'WHERE a.VALUE IS NULL' –

+0

我認爲是這樣。在接受一個答案之前,我正在檢查兩個答案。 –

+0

@Ic - 好點 - 我的不好和糾正。我認爲2個答案之間的區別在於上面的聯接避免了子查詢,應該更高效,更易於閱讀。取決於數據和課程的測試。 – bhs

1

檢查a.value中設置爲執行所述更新,並且從內子句在B表僅選擇(並且從外子句中使用A的值):

update A 
    set VALUE = (select B.VALUE from B where B.CODE = A.CODE) 
    where VALUE IS NULL; 
+0

這似乎工作。但我還有一個問題:有些行只是空的,我無法替換它們。我嘗試使用'where VALUE =''',但它給了我一個錯誤:子查詢返回多行。我被困在這裏。 –

+0

我在內部子句中添加了「限制1」,解決了問題。可能是重複的行? –