MySQL:使用(选择?)表中的结果进行批量更新的最快方法

标签 mysql

我的 table 上有超过 7,000,000 本书,包括电子书(约 500K)和真实书籍。 我为电子书添加了一个 Parent_ean 列,并希望用真实书籍中的 ean 数字填充它们,其中作者和标题相同。

这是我迄今为止所拥有的(替代方案 A):

UPDATE books as ebooks, books as parents
SET ebooks.parent_ean = parents.ean
WHERE (
  parents.title = ebooks.title AND parents.author = ebooks.author
  AND parents.format NOT LIKE "%Digital%"
  AND ebooks.format LIKE "%Digital%"
  AND ebooks.parent_ean = ""
  );

我不确定这是最快的方法(查询仍在运行:-/)或者它是否按预期工作(完成后才能看到它)。还有其他更好的方法吗?

这是替代方案 B(上面稍加修改。c=ebooks,p=parents):

UPDATE books as c,
  (SELECT ean, title, author FROM books
   WHERE format NOT LIKE "%Digital%") as p
SET c.parent_ean = p.ean
WHERE (
  p.title = c.title AND
  p.author = c.author AND
  c.format LIKE "%Digital%" AND
  c.parent_ean = "");

替代方案 B 感觉比 A 更快(但它仍在运行)。也许有更好的方法?

最佳答案

试试这个:

UPDATE books as a INNER JOIN books as b
ON b.title = a.title AND b.author = a.author
SET a.parent_ean = b.ean
WHERE SUBSTRING(a.format,1,7) = "Digital"
AND SUBSTRING(b.format,1,7) <> "Digital"
AND a.parent_ean = ""

关于MySQL:使用(选择?)表中的结果进行批量更新的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28231649/

相关文章:

mysql - 在查询中查询? (微软 Access )

MySQL 将数据从 5.1 迁移到 5.6 - 威胁

MySQL:使用表中的parent_id获取所有层次结构

php - 为什么 PDO 的结果是两个嵌套数组以及如何使用它们

c# - 从连接字符串中获取用户名和密码的正确方法?

MySQL根据状态字段计算多行之间的时间差

mysql - Ubuntu mysql Dreamweaver 403 错误

mysql - 拉拉维尔 : hasManyThrough relation to get many to many table values

mysql - 使用 (No)SQL 的 Rails 微博

mysql - 如何在 MySQL 中使用不相关的表创建 View