13

我有一张桌子,上面放着一堆产品(在这种情况下是书)。我的销售点系统为我生成了一份包含 ISBN(唯一产品编号)和永久销售的报告。

我基本上需要进行更新,将一张表中的 ISBN 与另一张表中的 ISBN 匹配,然后将一张表中的销售额添加到另一张表中。

这需要对大约 30,000 种产品进行。

这是我正在使用的 SQL 语句:

UPDATE `inventory`,`sales` 
   SET `inventory`.`numbersold` = `sales`.`numbersold` 
 WHERE `inventory`.`isbn` = `sales`.`isbn`;

我收到 MySQL 错误:

#1317 SQLSTATE: 70100 (ER_QUERY_INTERRUPTED) 查询执行被中断

我正在使用 GoDaddy.com 提供的 phpMyAdmin

4

3 回答 3

9

我可能来晚了,但是......看起来查询确实被执行时间限制打断了。解决这个问题可能没有简单的方法,但这里有几个想法:

确保inventory.isbnsales.isbn被索引。如果不是,添加索引将大大减少您的执行时间。

如果这不起作用,请将查询分解为块并运行几次:

UPDATE `inventory`,`sales` 
  SET `inventory`.`numbersold` = `sales`.`numbersold` 
WHERE `inventory`.`isbn` = `sales`.`isbn`
  AND substring(`inventory`.sales`,1,1) = '1';

AND子句将搜索限制为以数字 1 开头的 ISBN。对从“0”到“9”的每个数字运行查询。对于 ISBN,您可能会发现选择最后一个字符可以获得更好的结果。使用substring(库存.sales,-1)`

于 2013-06-27T23:27:35.320 回答
0

尝试在这样的两个表中使用 INNER JOIN

       UPDATE `inventory` 
       INNER JOIN `sales` 
       ON  `inventory`.`isbn` = `sales`.`isbn`
       SET `inventory`.`numbersold` = `sales`.`numbersold` 
于 2013-06-27T23:23:04.400 回答
0

更新inventorysales 设置inventorynumbersold= salesnumbersold 在哪里inventoryisbn= salesisbninventoryid< 5000

更新inventorysales 设置inventorynumbersold= salesnumbersold 在哪里inventoryisbn= salesisbninventoryid> 5000 inventoryid< 10000

...

如果报错,可以尝试将数量减少到1000,例如

于 2016-11-28T10:03:08.860 回答