mysql。更新使用类似行的值复制值

时间:2018-05-20 13:45:07

标签: 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_model43853103ean_number344534534544的所有产品,请将product_image更新为43853103_sed.jpg。因此,在上面的示例中,对于product_noimage.gif43853103_sed.jpgproducts_model43853103的所有产品,ean_number替换为344534534544

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

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

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

亲切的问候

1 个答案:

答案 0 :(得分:0)

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

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;
相关问题