我有一个带有重复值的表。我需要通过从另一行复制来更新行中的值。
该表有超过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
为43853103
且ean_number
为344534534544
的所有产品,请将product_image
更新为43853103_sed.jpg
。因此,在上面的示例中,对于product_noimage.gif
为43853103_sed.jpg
且products_model
为43853103
的所有产品,ean_number
替换为344534534544
。
对于单个记录,它很容易更新。
我想在整个产品表中搜索重复项,并使用product_model和ean_number作为匹配条件更新product_image字段。
我只希望更新发生在ean_number不为空的地方。所以像4567878344这样的product_model不应该更新。
亲切的问候
答案 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;