2015-05-09 74 views
0

我嘗試使用下面的代碼JOIN我的MySQL表,TableATableB,當兩個他們ownerpos列相匹配,在匹配記錄設置的valTableATableBval更新MySQL表使用JOIN當兩個值匹配

UPDATE TableA A 
JOIN TableB B 
ON A.owner = B.owner AND A.pos = B.pos 
SET A.val = B.val 

TableA中有大約10萬條記錄和表B有大約10000只應有一個owner/pos比賽中的每個表。

當我執行這個查詢時,所有東西都掛起來,最後我不得不中止執行。有沒有我在語法上或其他方面缺少的東西來獲得我想要的結果?

編輯:

我也曾嘗試以下;結果是相同的:

UPDATE TableA 
JOIN TableB 
ON TableA.owner = TableB.owner AND TableA.pos = TableB.pos 
SET TableA.val = TableB.val 
+0

前面加上'EXPLAIN'到查詢,看看MySQL不得不說。在此處發佈結果:) –

+0

使用'EXPLAIN'輸出是:您的SQL語法有錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在'UPDATE TableA A JOIN TableB B ON 2 A.owner = B.owner'在第2行使用正確的語法 – amoeba

+0

您可以選擇連接嗎? 'SELECT * FROM TableA A INNER JOIN Table B B ON TableA.owner = TableB.owner AND TableA.pos = TableB.pos' – Pachonk

回答

0

替換 A.owner = B.owner AND A.pos = B.pos 與 (A.owner = B.owner AND A.pos = B.pos)並看看解釋計劃是否給出了任何錯誤?

+0

'EXPLAIN'給出錯誤:您的SQL語法中有錯誤;檢查對應於您的MySQL服務器版本的手冊,以便在'UPDATE TableA A JOIN TableB B ON(A.owner = B.owner'at line 2 – amoeba

+0

您可以參考此鏈接, http:/ /stackoverflow.com/questions/1293330/how-can-i-do-an-update-statement-with-join-in-sql 它應該可以解決你的問題。 –

+0

我加了'INNER JOIN',但沒有解決這是我的代碼和我可以看到的答案代碼之間的唯一區別 – amoeba

0

下面的查詢可能會有幫助:

UPDATE A 
SET A.val = B.val 
from TableA A 
INNER JOIN TableB B 
ON A.owner = B.owner AND A.pos = B.pos 
+0

這應該沒有什麼區別:http://stackoverflow.com/questions/15209414/mysql-update-join SET是加入後。 – Pachonk