编辑原来有一个H2数据库坐在mysql数据库的顶部。我写的查询命中H2。我会继续研究,看看这是否会工作更新列加入
我有两个表我想同时更新,其中一个值是由存储在另一个值确定。我的更新查询是这样的:
UPDATE table1 AS A INNER JOIN table2 AS B
ON A.COL1 = B.COL1
AND A.COL2 = B.COL2
SET A.COL3 = 'SOME VAL',
B.COL4 = B.COL4 - A.COL4,
B.COL5 = B.COL5 - A.COL4
WHERE A.ID IN (23,5,21)
我得到一个语法错误,说'期望“SET”'我正在做INNER JOIN。
我相信我应该能够每UPDATE multiple tables in MySQL using LEFT JOIN和http://dev.mysql.com/doc/refman/5.0/en/update.html为此加入更新。有人知道我的语法错误是什么吗?
更新为后人
首先感谢托马斯·穆勒对他的帮助。
我结束了使用下面的语法和我发现它有点混乱,我在这里留下以备将来观众。
UPDATE TABLE1 SET(COL1, COL2) =
(SELECT T1.COL1 - T2.AMNT, T1.COL2 + T2.AMNT
FROM TABLE1 T1 RIGHT JOIN TABLE2 T2
ON T1.COL3 = T2.COL3
AND T1.COL4 = T2.COL4
WHERE T2.ID = 23)
WHERE EXISTS
( SELECT *
FROM TABLE2
WHERE TABLE1.COL3 = TABLE2.COL3
AND TABLE1.COL4 = TABLE2.COL4
AND TABLE2.ID = 23)
注:我不得不使用的第一选择一个加入,因为我无法得到我们下面讨论工作的语法。
由于使用这种方法,如果我得到表2的id(在我原来的例子23,5,21)列表,我所要做的多个更新语句的结果。如果有人知道更好的方法来做到这一点,请让我知道。
没有什么错在自己的查询,检查表或列名,也许一些被限制的话,尽量BACKTICK他们,如果存储过程或任何其他类型的代码块检查,如果前一个语句的一部分以分号等方式正确结束...... – piotrm 2013-04-30 22:28:46
也许你正在使用一个非常旧的版本,如4.1?如果你不知道,运行SELECT VERSION() – 2013-04-30 22:42:49
原来我使用的是mysql 5.5但是有一个H2数据库位于它的顶部。所以我得到的语法错误,因为我实际上查询H2表。将更新问题来反映这一点,但我不那么乐观,现在这将工作。 – 2013-05-01 13:46:45