mysql使用类似行中的值更新重复值

cyvaqqii  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(255)

我得到了一个有重复值的表。我需要通过从另一行复制来更新行中的值。
这个表有超过12万行。
例如 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_model43853103 以及 ean_number344534534544 ,然后更新 product_image 作为 43853103_sed.jpg . 在上面的例子中 product_noimage.gif 替换为 43853103_sed.jpg 所有产品 products_model43853103 以及 ean_number344534534544 .
对于单个记录,很容易更新。
我想搜索整个product表中的重复项,并使用product\ model和ean\ number作为匹配条件更新product\ image字段。
我只希望更新发生在ean\ U号码不为空的地方。所以像4567878344这样的产品型号不应该更新。
谨致问候

ego6inou

ego6inou1#

一种方法是在此处使用更新联接:

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;

相关问题