2015-05-09 69 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