/ / Використовуйте тригер MySQL для оновлення іншої таблиці, коли знайдено повторюваний ключ - тригери mysql

Використовуйте тригер MySQL, щоб оновити іншу таблицю, коли знайдений дублікат ключа - mysql, тригери

Я почухав мені цю голову, сподіваючись, що хтось із вас добрих людей направить мене на вирішення цієї проблеми.

У мене є таблиця клієнтів mysql, вона містить багато даних, але для цілей цього питання нам потрібно турбуватися лише про 4 стовпці "Ідентифікатор", "Ім'я", "Прізвище", "Поштовий індекс"

Проблема в тому, що таблиця містить багато дубльованих клієнтів.

Створюється нова таблиця, де кожен клієнт унікальний, і для нас ми вирішили, що унікальний клієнт базується на "Ім'я", "Прізвище" та "Поштовий Індекс"

Однак (це важливий біт) нам потрібно забезпечити, щоб кожен новий "унікальний" запис клієнта також міг бути узгоджений з початковими кількома записами цього клієнта в оригінальній таблиці.

Я вважаю, що найкращий спосіб зробити це - матитретя таблиця, яка має "NewUniqueID", "OldCustomerID". Тож ми можемо шукати в цій таблиці "NewUniqueID" = "123", і вона поверне кілька значень "OldCustomerID", де це доречно.

Я сподіваюся зробити цю роботу за допомогою тригера та синтаксису ключового слова on on. Отже, трапиться таке:

  1. Запит виконується, беручи стару таблицю клієнтів та вставляючи її до нової унікальної таблиці. (Стандартний запит вставки вибору)

  2. На повторюваному ключі продовжуйте додавати записи, але додайте один запис до третьої таблиці, зазначивши "NewUniqueID", який обдурив разом із "OldCustomerID" запису, який ми намагалися вставити.

Сподіваюся, це має сенс, прошу вибачення, якщо це не ясно. Я вітаю та ціную будь-які думки щодо цього! Велике дякую Джейсоне

Відповіді:

1 для відповіді № 1

Оскільки у кожного старого клієнта є точно один новий клієнт (а не навпаки), "правильний" дизайн додасть новий стовпець до старої таблиці, скажімо new_customer_id:

alter table old_customer add new_customer_id int;

Після створення нових записів клієнтів:

insert into new_customer (first_name, last_name, postcode)
select distinct first_name, last_name, postcode
from old_customer;

Тоді ви можете заповнити новий стовпець таким чином:

update old_customer oc set
new_customer_id = (
select id
from new_customer
where first_name = oc.first_name
and last_name = oc.last_name
and postcode = oc.postcode);

За бажанням, ви можете не використовувати старі записи з даними про сміття - вони мали б new_customer_id = null;