首页 > 解决方案 > 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_modelis43853103ean_numberis的所有产品344534534544,然后更新product_image43853103_sed.jpg。因此,在上面的示例中,所有产品product_noimage.gif都替换为is和is 。43853103_sed.jpgproducts_model43853103ean_number344534534544

对于单个记录,很容易更新。

我想在整个产品表中搜索重复项,并使用 product_model 和 ean_number 作为匹配条件更新 product_image 字段。

我只希望更新发生在 ean_number 不为空的地方。所以 product_model 像 4567878344 不应该更新。

亲切的问候

标签: mysql

解决方案


一种选择是在此处使用更新连接:

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;

推荐阅读