mysql. обновляет дубликаты значений со значениями из аналогичной строки

0

Я получил таблицы с значениями дубликатов. Мне нужно обновить значения в строках путем копирования из другой строки.

Таблица имеет более 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 не должен обновляться.

С уважением

  • 0
    Вы только хотите обновить номер ean_number, который присутствует. и что в нем нужно обновить?
  • 0
    я обновил свой вопрос я только хочу обновить поле product_image
Теги:

1 ответ

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;
  • 0
    У меня есть более 100K моделей, и мне нужно, чтобы он находил и обновлял значения, как указано выше. Как я могу найти его с помощью обновления
  • 0
    @naf Я ответил на точный вопрос, который вы задали. Если вам нужно другое обновление, то отредактируйте свой вопрос и изложите логику.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню