【问题标题】:MYSQL - How to increment fields in one row with values from another rowMYSQL - 如何用另一行的值增加一行中的字段
【发布时间】:2013-06-24 16:09:57
【问题描述】:

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

【问题讨论】:

  • v3 mysql?你升级那只恐龙已经很久了了。

标签: mysql increment


【解决方案1】:

如果不使用子选择,您也许可以进行 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

【讨论】:

  • 我知道你要去哪里但是,当我 INNER JOIN Sales b ON a.uid = b.uid 时,我没有得到任何结果改变。我错过了什么还是我做错了 ON 语句?
  • 由于 uid 是独一无二的,这样做只会使每个计数和数量翻倍。您想对所有行执行此操作,还是仅对 uid 1 和 uid 2 执行此操作?如果在许多行之间,您如何确定哪些行值用于更新哪些其他行值?
  • 只有 uid 1 和 2。我正在使用放置在不正确行中的值更新正确的行。不幸的是,我必须手动发现它。
  • 据我所见,通过连接进行交叉更新的能力适用于 mysql 4.0 或更高版本。感谢您的建议,尽管我知道这适用于 mysql 4.0 及更高版本!
  • 没问题。它只适用于较新的版本并不让我感到惊讶,但不幸的是我无法对其进行测试。
【解决方案2】:

大多数时候,子查询可以重写为 join ... 甚至 MySQL 3.23 也有 multiple table 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 子句。

【讨论】:

  • 不错!这个有效。谢谢!而且我知道我们使用的是这样一个旧版本的mysql。但是将 10,000 个数据库更新到新版本的 mysql 并不容易,因为某些功能可能不再起作用:P
  • 我们都知道使用旧硬件/软件意味着什么;)
  • 其实我在mysql的错误版本上测试过这个。这实际上不适用于我们的恐龙 mysql 版本..但仍然感谢您在较新的 mysql 版本中工作的好答案
  • @WalkerBoh :D 您能否提供错误消息和您的 MySQL 的确切版本 - 根据文档,应该与 3.23 一起使用。那是真的老了吗!?!
  • 这是 mysql 3.23.58。这是我在我们的一张表上使用的:mysql> update inventory_closing_balance AS T1,inventory_closing_balance AS T2 SET T1.amount = T1.amount + T2.amount where T1.inventory_closing_balance_uid = 244 AND T2.inventory_closing_balance_uid = 243;错误 1064:第 1 行的“AS T1,inventory_closing_balance AS T2 SET T1.amount = T1.amount + T2.amount whe”附近的 SQL 语法有错误
猜你喜欢
  • 2021-06-25
  • 2018-04-29
  • 1970-01-01
  • 2013-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多