Как удалить значения из трёх связанных таблиц одновременно?

Суть проблемы: Есть 3 таблицы в MySQL связанные между собой ключами. По непонятной причине в заглавной таблице (Indicator) появились дублирующие записи, которые не нужны, но удалить их не получается, потому что к ним привязаны записи в monitoring_result, а к тем записи из monitoring_results_methods.

Возможно ли каким-то образом удалить все записи monitoring_results_methods связанные с monitoring_result (и сами записи в monitoring_result), которые связанны с записью в Indicator в одном запросе? Сделать это руками физически невозможно - записей огромное количество.

Содержание таблиц:

indicator:

  • id
  • parent_id
  • title
  • code
  • report_form_id
  • index_number
  • type

monitoring_result:

  • id
  • indicator_id (indicator.id)
  • method_id
  • report_id
  • report_template_id
  • total_value
  • custom_method
  • is_visible

monitoring_result_method:

  • result_id (monitoring_result.id)
  • method_id

Ответы (1 шт):

Автор решения: navasiolau
START TRANSACTION;

DELETE FROM monitoring_results_methods m
WHERE result_id in (
   SELECT id FROM monitoring_result
   WHERE indicator_id = 5000
);  

DELETE FROM monitoring_result
WHERE indicator_id = 5000;

DELETE 
FROM indicator 
WHERE indicator.id = 5000;

COMMIT;

Проблема решена с помощью транзакции с тремя запросами.

→ Ссылка