MySQL、多表更新和奇怪的结果

MySQL、多表更新和奇怪的结果,mysql,sql,sql-update,multiple-tables,Mysql,Sql,Sql Update,Multiple Tables,我有两张桌子: 测试1: id int, value int, parentId int 和测试2: id int, value int, parentId int 在测试1中,我有以下记录: id value parentId 1 0 1 2 0 1 3 0 1 在测试2中,我得到: id value parentId 1 0 1 我想使用多表功能在一次更新中更新两个表。 目标是向TEST1的每个记录添加+1值,并

我有两张桌子:

测试1:

id int, value int, parentId int
和测试2:

id int, value int, parentId int
在测试1中,我有以下记录:

 id  value  parentId
 1   0      1
 2   0      1
 3   0      1
在测试2中,我得到:

id  value  parentId
1   0      1
我想使用多表功能在一次更新中更新两个表。 目标是向TEST1的每个记录添加+1值,并向TEST2中的记录添加+1值,其中parentId类似于TEST1

我的问题是:

UPDATE TEST1 t1
LEFT OUTER JOIN TEST2 t2 ON t1.parentId=t2.parentId
SET t1.value = t1.value + 1,
    t2.value = t2.value + 1;
之后,我进行一次选择以检查TEST1的值是否已更新:

SELECT * FROM TEST1;
它给了我:

id  value  parentId
1   1      1
2   1      1
3   1      1
我检查测试2:

SELECT * FROM TEST2;
它给了我:

id  value  parentId
1   1      1
我觉得奇怪的是TEST2的记录值为1。我希望是3,因为TEST1的更新在3条记录上,所以TEST2的更新应该在同一条记录上发生三次

为什么我得到1而不是3?获得3的正确查询是什么

编辑:我也尝试过:

SET @var=1;

UPDATE TEST1 t1
LEFT OUTER JOIN TEST2 t2 ON t1.parentId=t2.parentId
SET t1.value = t1.value + 1,
    t2.value = (@var:= @var + 1);

在这个查询之后,t2.value等于2!而不是我预期的4。

请尝试右外部联接,而不是左外部联接

也许我在这里错了,但在查询完成之前,您的update语句将看到t1.value为0,因为您的查询尚未完成执行,这是预期的行为,不是吗?

这将满足您的要求。它和您一样加入了TEST1和TEST2。 在名为agg的子查询上使用TEST1上的总和聚合进行附加联接


谢谢你的回答,但我刚刚尝试过,这并没有改变任何事情。我使用左外连接作为示例,从这里开始。事实上,我认为这可能是所有的内部连接,我不能这样做,因为在我的真实情况下,我使用列,而不是1。示例:在t1.parentId=t2.parentId集合t1.value=t1.value+1,t2.value=t2.value+t1.value上更新TEST1 t1左外部联接TEST2 t2@杰罗姆:我把计数加总改为总和。从这个例子中,不清楚你是指1*3还是1+1+1。这真的有用吗?当然是这样,但我不想要这种行为,这就是问题所在;
UPDATE TEST1 t1
LEFT OUTER JOIN TEST2 t2 ON t1.parentId=t2.parentId
LEFT OUTER JOIN (
  SELECT 
    parentId,
    sum(value) AS sum_v
  FROM TEST1
  GROUP BY parentId
) agg ON t1.parentId=agg.parentId
SET t1.value = t1.value + 1,
    t2.value = t2.value + agg.sum_v;