MYSQL-如何使用另一行中的值增加一行中的字段

MYSQL-如何使用另一行中的值增加一行中的字段,mysql,increment,Mysql,Increment,我有一个表,我们称之为“Sales”,它有4行:uid、date、count和amount。我想使用该表中不同行的count/amount值来增加一行的count和amount值。例如: UID | Date | Count | Amount| 1 | 2013-06-20 | 1 | 500 | 2 | 2013-06-24 | 2 | 1000 | 理想的结果是uid 2的计数/金额值由uid 1的值递增: UID | Date | C

我有一个表,我们称之为“Sales”,它有4行:uid、date、count和amount。我想使用该表中不同行的count/amount值来增加一行的count和amount值。例如:

UID | Date       | Count | Amount|
1   | 2013-06-20 | 1     | 500   |
2   | 2013-06-24 | 2     | 1000  |
理想的结果是uid 2的计数/金额值由uid 1的值递增:

UID | Date       | Count | Amount|
1   | 2013-06-20 | 1     | 500   |
2   | 2013-06-24 | 3     | 1500  |

请注意,我公司的数据库是较旧版本的MYSQL(3.something),因此不可能进行子查询。我很想知道,除了执行“更新销售集计数=计数+1”和“金额”列之外,这是否可行。我有很多行要更新,如果您可以想象的话,单独递增值是相当耗时的。谢谢你的帮助和建议

大多数情况下,子查询可以重写为join。。。就连MySQL 3.23也有

像这样的事情可能会奏效。。。但是我无法测试它(因为您是唯一一个仍然使用如此旧版本的MySQL;)


为了简单起见,我在这里显式地将S1.uid设置为“2”,将S2.uid设置为“1”——如果这一行适用,您应该能够使用符合您特定需要的WHERE子句。

大多数情况下,子查询可以重写为join。。。就连MySQL 3.23也有

像这样的事情可能会奏效。。。但是我无法测试它(因为您是唯一一个仍然使用如此旧版本的MySQL;)


为了简单起见,我在这里显式地将S1.uid设置为“2”,将S2.uid设置为“1”——如果这一行适用,您应该能够使用符合您特定需要的WHERE子句。

无需使用subselect,您就可以进行连接。根据您对哪些列的描述,您不确定要将这些行相互链接以决定要更新哪些列,但下面可能会告诉您一些想法

UPDATE Sales a
INNER JOIN Sales b
ON ..........
SET a.Count = a.Count + b.Count,
a.Amount = a.Amount + b.Amount
但是,我不确定这是否适用于MySQL的旧版本

如果您只是基于第1行中的值更新第2行,那么下面的操作应该可以完成

UPDATE Sales a
INNER JOIN Sales b
ON a.uid = 2 AND b.uid = 1
SET a.Count = a.Count + b.Count,
a.Amount = a.Amount + b.Amount

不使用子选择,您可能可以执行联接。根据您对哪些列的描述,您不确定要将这些行相互链接以决定要更新哪些列,但下面可能会告诉您一些想法

UPDATE Sales a
INNER JOIN Sales b
ON ..........
SET a.Count = a.Count + b.Count,
a.Amount = a.Amount + b.Amount
但是,我不确定这是否适用于MySQL的旧版本

如果您只是基于第1行中的值更新第2行,那么下面的操作应该可以完成

UPDATE Sales a
INNER JOIN Sales b
ON a.uid = 2 AND b.uid = 1
SET a.Count = a.Count + b.Count,
a.Amount = a.Amount + b.Amount


v3mysql?你升级恐龙3.v3 mysql的时间已经过去很久了?你升级那只恐龙已经很久了。太好了!这个成功了。谢谢我知道我们使用的是这么旧的mysql版本。但是要将10000个数据库更新到mysql的新版本并不容易,因为有些功能可能不再工作:我们都知道使用传统硬件/软件意味着什么;)实际上,我在错误的mysql版本上测试了这个。这在我们的恐龙mysql版本上实际上不起作用,但仍然为您提供了在较新的mysql中工作的好答案versions@WalkerBoh:D你能提供错误消息和你的MySQL的确切版本吗?根据文档,这应该适用于3.23。那真的很老吗!?!它是mysql 3.23.58。下面是我在我们的一个表上使用的内容:mysql>将库存余额更新为T1,库存余额更新为T2设置为T1.amount=T1.amount+T2.amount,其中T1.inventory\U closing\U balance\U uid=244和T2.inventory\U closing\U balance\U uid=243;错误1064:您的SQL语法在第1Nice行的“AS T1,库存\期末\余额AS T2 SET T1.amount=T1.amount+T2.amount whe”附近有错误!这个成功了。谢谢我知道我们使用的是这么旧的mysql版本。但是要将10000个数据库更新到mysql的新版本并不容易,因为有些功能可能不再工作:我们都知道使用传统硬件/软件意味着什么;)实际上,我在错误的mysql版本上测试了这个。这在我们的恐龙mysql版本上实际上不起作用,但仍然为您提供了在较新的mysql中工作的好答案versions@WalkerBoh:D你能提供错误消息和你的MySQL的确切版本吗?根据文档,这应该适用于3.23。那真的很老吗!?!它是mysql 3.23.58。下面是我在我们的一个表上使用的内容:mysql>将库存余额更新为T1,库存余额更新为T2设置为T1.amount=T1.amount+T2.amount,其中T1.inventory\U closing\U balance\U uid=244和T2.inventory\U closing\U balance\U uid=243;错误1064:您的SQL语法在第1行的“AS T1,库存\期末\余额AS T2 SET T1.amount=T1.amount+T2.amount whe”附近有一个错误。我知道您的目的是什么。但是,当我在a.uid=b.uid上内部加入销售b时,我没有得到任何更改的结果。我是遗漏了什么还是做了错误的ON语句?因为uid是唯一的,这样做只会使每个计数和数量加倍。要对所有行执行此操作,还是仅对uid 1和uid 2执行此操作?如果在多行之间,如何确定哪些行值用于更新哪些其他行值?只有uid 1和uid 2。我正在使用放置在错误行中的值更新正确行。不幸的是,我不得不用肉眼手动识别。据我所见,通过join进行交叉更新的功能适用于mysql 4.0或更高版本。谢谢你的建议,虽然我知道这在mysql 4.0及以上版本中有效!没问题。它只适用于较新的版本,这并不奇怪,但不幸的是,我没有办法测试它。我知道你打算怎么做。然而,当我在a.uid=b.uid上内部加入Sales b时,结果没有改变。我是遗漏了什么还是做了错误的ON语句?因为uid是唯一的,这样做只会使每个计数和数量加倍。要对所有行执行此操作,还是仅对uid 1和uid 2执行此操作?如果在多行之间,如何确定哪些行值用于更新哪些其他行值?只有uid 1和uid 2。我正在使用放置在错误ro中的值更新正确的行