Я получил таблицы с значениями дубликатов. Мне нужно обновить значения в строках путем копирования из другой строки.
Таблица имеет более 120 тыс. Строк.
Например, таблица 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_image с использованием product_model и ean_number в качестве критериев соответствия.
Я хочу, чтобы обновление происходило только там, где 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;