mysql - mysql 。使用相似行中的值更新重复值
问题描述
我有一个重复值的表。我需要通过从另一行复制来更新行中的值。
该表有超过 120K 行。
例如,该products
表具有以下数据:
------------------------------------------------------------
| products_model | products_ean | products_image |
|----------------------------------------------------------|
| 43853103 | 344534534544 | product_noimage.gif |
| 2145B001 | 376766767777 | 798368_1019.jpg |
| 44544545 | 344343344355 | eee_fee.jpg |
| 43853103 | 344534534544 | 43853103_sed.jpg |
| 2145B001 | 376766767777 | product_noimage.gif |
| 4567878344 | | 4567878344_hhg.jpg |
| 4567878344 | | product_noimage.gif |
我想搜索具有特定条件的所有记录。例如,对于products_model
is43853103
和ean_number
is的所有产品344534534544
,然后更新product_image
为43853103_sed.jpg
。因此,在上面的示例中,所有产品product_noimage.gif
都替换为is和is 。43853103_sed.jpg
products_model
43853103
ean_number
344534534544
对于单个记录,很容易更新。
我想在整个产品表中搜索重复项,并使用 product_model 和 ean_number 作为匹配条件更新 product_image 字段。
我只希望更新发生在 ean_number 不为空的地方。所以 product_model 像 4567878344 不应该更新。
亲切的问候
解决方案
一种选择是在此处使用更新连接:
UPDATE products p1
INNER JOIN
(
SELECT
products_model,
MAX(CASE WHEN products_image <> 'product_noimage.gif'
THEN products_image END) AS products_image
FROM products
GROUP BY products_model
HAVING COUNT(products_ean) > 1
) p2
ON p1.products_model = p2.products_model
SET p1.products_image = p2.products_image;
推荐阅读
- node.js - 在 Node.js 中替换 JSON 对象的值
- python - 如何仅在引号之间的那部分删除空格
- r - 如何在R中按月/年对变量求和?
- suitecrm - 在编辑视图 suitecrm 中获取通过 url 传递的记录 id
- kettle - 水壶可以从oracle表中导出BLOB数据吗?
- javascript - 检测在 JavaScript 中完全关闭的浏览器
- javascript - 使用正则表达式的javascript用户输入验证不起作用
- appium - 使用 Xcode 构建命令或 appium 构建时测试失败
- java - LMAX 的颠覆者。如何定义多个EventHandlerGroup?
- python - 如何删除 cuInit failed: CUDA (PyCuda) 中的未知错误