2016-12-07 6 views
0

У меня есть три MySQL таблицаMySQL - сравнение значений двух таблиц и журналы их

  • Моей import таблица получает значение продукта из cronjob
  • Моих products таблицы хранит всех продукты
  • Моей log таблица должна хранить все изменения (добавлять, удалять, изменять)

Я хочу, чтобы сравнить мою import таблицу с моим product (они оба имеют одну и ту же схему), а затем получают, если были добавлены, удалены или изменены продукты. Плюс мне нужно знать , который продукт был изменен/добавлен/удален (например, по номеру продукта - не PK) и зарегистрирован в моей таблице log.

+0

Экспортируйте содержимое таблиц в CSV-файлах, используйте инструмент diff (желательно GUI), чтобы найти различия. – axiac

ответ

0

Вы можете выбрать строки из продуктов, которые находятся в одной таблице, а не в другом следующим образом:

SELECT * FROM import WHERE product_number NOT IN (SELECT product_number FROM products);

Предполагая, что эти продукты, которые должны быть добавлены, первый запись в log:

INSERT INTO log (product_number, description) SELECT product_number, 'Added' FROM import WHERE product_number NOT IN (SELECT product_number FROM products);

Затем обновите products:

INSERT INTO products SELECT * FROM import WHERE product_number NOT IN (SELECT product_number FROM products);

Для продуктов, которые должны быть удалены, выберите строки в products, которые не import, и для продуктов, которые должны быть изменены, выберите строки в import и products, которые имеют один и тот же product_number, но отличаются в других областях.

Смежные вопросы