我的 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/