使用内部联接更新多个表中的列

时间:2013-04-30 22:12:43

标签: mysql sql-update h2

编辑结果发现有一个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 JOINhttp://dev.mysql.com/doc/refman/5.0/en/update.html进行加入更新。有人知道我的语法错误是什么吗?

后人更新
首先,感谢Thomas Mueller的帮助。

我最终使用了以下语法,因为我发现它有点令人困惑,我将它留在这里供未来的观众使用。

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)

注意:我必须在第一个选择中使用连接,因为我无法获得下面讨论的语法。

作为使用此方法的结果,如果我得到table2 id的列表(在我的原始示例中为23,5,21),我必须执行多个更新语句。如果有人知道更好的方法,请告诉我。

1 个答案:

答案 0 :(得分:2)

H2不支持在一个SQL语句中同时更新两个表。您需要使用两个语句。有关支持的语法,请参阅UPDATE statement railroad diagram