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

Mysql 使用内部联接更新多个表中的列,mysql,sql-update,h2,Mysql,Sql Update,H2,Edit发现有一个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.CO

Edit发现有一个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)
我得到一个语法错误,在我进行内部连接的地方显示“预期集”

我相信我应该能够做到这一点加入更新每和。有人知道我的语法错误是什么吗

为子孙后代更新 首先,感谢托马斯·米勒的帮助

我最终使用了以下语法,因为我发现它有点混乱,我将把它留给未来的观众

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)
注意:我必须在第一次选择中使用联接,因为我无法使用下面讨论的语法


使用此方法的结果是,如果在我的原始示例中得到一个Table2ID23,5,21的列表,我必须执行多个update语句。如果有人知道更好的方法,请告诉我。

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

查询本身没有问题,请检查表名或列名,可能有些是限制词,请尝试反勾选它们,如果它是存储过程或任何其他类型的代码块的一部分,请检查前面的语句是否正确地以分号结束,等等……也许您使用的是非常旧的版本,如4.1?如果您不知道,请运行SELECT VERSIONTurns out我使用的是mysql 5.5,但它上面有一个H2数据库。所以我得到了语法错误,因为我实际上是在查询H2表。将更新问题以反映这一点,但我不太乐观,这将是现在的工作。我可以至少做一些像以下?我无法正确设置格式。但我试图用表2中的值更新表1中的两列值,其中表2的某些条件更新SUP_INV SI set SI.Amnt_Reserved,SI.Amnt_Used=选择SI.Amnt_Reserved-JS.Amnt,在23,15,49中,SI.Amnt\u使用了JOB\u SUPPLY JS中的+JS.Amnt,其中SI.SUPPLY\u NAME=JS.SUPPLY\u NAME和SI.SUPPLY\u MFR=JS.SUPPLY\u MFR和JS.ENTITY\u ID,我从你的帖子中得到了它的语法是的,应该很好,我没有测试,但看起来不错。您可能需要添加where条件,可能是where EXIST选择。。。除非此表的所有行都需要更新,否则将返回update语句。不幸的是,这可能意味着声明中有些重复。