查询执行被中断,错误 #1317。

14
我手头有一个包含许多产品(例如图书)的表格。我的销售系统生成了一份报告,其中包含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。


“UPDATE inventory, sales” … 这样正确吗?我的意思是 inventory,sales 中间的逗号。 - Rahul
@Rahul 当我运行这个SQL语句时,我收到了这个错误 #1054- 在'where子句'中未知的列'sales.isbn'。 - PTC
@ Prix 库存包含 49,212 行。每一行都包含有关书籍的信息(例如标题、作者、出版商等)。销售记录包含 26,455 行。我意识到每个表中的行数不相等,但没关系。我只需要匹配的行进行更新。明白吗? - PTC
@PTC 你需要询问支持,我做了一个小测试,两个查询都可以正常运行,请在这里查看:Yoursmine - Prix
@PTC 询问 Godaddy 是否有查询超时设置,如果有,而您的查询超过了该时间限制,查询将被中断。 - Prix
显示剩余8条评论
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(inventory.sales,-1)


0
尝试在这两个表中使用INNER JOIN。
       UPDATE `inventory` 
       INNER JOIN `sales` 
       ON  `inventory`.`isbn` = `sales`.`isbn`
       SET `inventory`.`numbersold` = `sales`.`numbersold` 

0

更新 inventorysales SET inventory.numbersold = sales.numbersold WHERE inventory.isbn = sales.isbn AND inventory.id < 5000

更新 inventorysales SET inventory.numbersold = sales.numbersold WHERE inventory.isbn = sales.isbn AND inventory.id > 5000 inventory.id < 10000

...

如果出现错误,你可以尝试将数字减少到1000,例如


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接