Geo*_*ner 5 mysql h2 sql-update
编辑原来有一个 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)
Run Code Online (Sandbox Code Playgroud)
我在执行 INNER JOIN 时收到语法错误,提示“预期“SET””。
我相信我应该能够使用 LEFT JOIN和http://dev.mysql.com/doc/refman/5.0/en/update.html在 MySQL 中对每个 UPDATE 多个表执行此连接更新。有人知道我的语法错误是什么吗?
给后代的更新
首先,感谢 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)
Run Code Online (Sandbox Code Playgroud)
注意:我必须在第一个选择中使用联接,因为我无法使我们下面讨论的语法起作用。
使用此方法的结果是,如果我获得 table2 id 列表(在我的原始示例中为 23,5,21),我必须执行多个更新语句。如果有人知道更好的方法来做到这一点,请告诉我。