考虑我有两张桌子,t1
并且t2
. t1
有两列:c1
和c2
。t2
有两列:c1
和c3
。我们在两个表中插入值:
CREATE TABLE t1 (c1 INT, c2 INT);
CREATE TABLE t2 (c1 int, c3 int);
INSERT INTO t1 VALUES (10,10), (20,20);
INSERT INTO t2 VALUES (10,10), (20,20);
t1
使用此查询进行更新:
update t1
set c2 = c2 + 10,
c2 = c2 + 20
将产生下一个结果:c2
列将分别等于 40,50。这意味着,第一次更新被评估,然后下一次更新使用第一个更新值,所以它就像使用c2 = c2 + 10 + 20
.
考虑到我需要t1
再次更新,但这一次,t2
使用此查询加入表:
update t1 left join t2 using (c1)
set c2 = c2+10,
c2 = c2+20;
此查询将产生下一个结果:c2
column 将分别等于 60,70,这意味着第一次更新被忽略,c2 = c2+20
最后只被评估。我期望结果是 70,80。
我知道我没有t2
在连接中使用,但在我的真实示例中我需要使用t2
并且我需要使用第一个更新值更新同一列两次。
为什么使用 join 进行相同的更新会产生不同的结果,并且是否可以在不将更新拆分为两个单独的更新的情况下使其工作?
编辑:我被告知在 MariaDB 10.1 上使用相同的代码,但在升级到 10.3 后它失败了。(不幸的是,我找不到在线的 MariaDB 10.1 fiddle 来自己测试它)