0

我有一张我们称之为“销售”的表格,它有 4 行:uid、日期、计数和金额。我想用该表中另一行的计数/金额值来增加一行的计数和金额值。例子:

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”之外,对于金额列也是如此。如果您可以想象的话,我有很多行要单独更新和递增值非常耗时。感谢您的任何帮助或建议!

4

2 回答 2

2

在不使用子选择的情况下,您也许可以进行 JOIN。从您的描述中不确定您将哪些行相互链接以决定更新哪些列,但以下内容可能会给您一些想法

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
于 2013-06-24T16:18:22.813 回答
1

大多数时候,子查询可以重写为连接......甚至 MySQL 3.23 也有多个表UPDATE

像这样的东西可能会奏效......但我无法测试它(因为你唯一一个仍在使用这种旧版本的 MySQL ;)

UPDATE Sales AS S1, Sales AS S2
    SET S1.`count` = S1.`count̀ +S2.`count`, S1.Amount = S1.Amount + S2.Amount
    WHERE S1.uid = 2 AND S2.uid = 1

为简单起见,我明确地将 S1.uid 设置为“2”,将 S2.uid 设置为“1”——如果这适用于这一行,您应该能够使用与您的特定需求相对应的 WHERE 子句。

于 2013-06-24T16:17:17.897 回答