Есть три таблицы:
table1: id, name
table2: id, name, table1_id
table3: id, name, table2_id
Как при удалении поля из верхней, удалить все привязанные поля в нижних? Проблема бОльшей вложенности не стоит, 3 таблицы 100% максимум. Пробовал вот так, но работает не совсем корректно, сносит table3 целиком
DELETE table1, table2, table3 FROM table1 INNER JOIN table2 ON table2.table1_id = table1.id INNER JOIN table3 ON table3.table2_id = table2.id WHERE table1.id = 1
1 вариант (рекомендованный): Настроить каскадное удаление для внешних ключей table1_id и table2_id.
2 вариант: Поочередно удалить записи сначала из table3, потом table2 и наконец из table1
DELETE FROM table3 WHERE table2_id in
(SELECT id FROM table2 WHERE table1_id in
(SELECT id FROM table1 WHERE [здесь ваше условие для выбора удаляемой записи из таблицы 1]))
DELETE FROM table2 WHERE table1_id in
(SELECT id FROM table1 WHERE [здесь ваше условие для выбора удаляемой записи из таблицы 1])
DELETE FROM table1 WHERE [здесь ваше условие для выбора удаляемой записи из таблицы 1]
Можно вот так сделать:
Добавляем констрейны
ALTER TABLE table2 ADD CONSTRAINT FK_table1_table2 FOREIGN KEY (table1_id) REFERENCES table1(id) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE table3 ADD CONSTRAINT FK_table2_table3 FOREIGN KEY (table2_id) REFERENCES table2(id) ON DELETE CASCADE ON UPDATE CASCADE;
Производим удаление
DELETE FROM table1 t1 WHERE t1.id = 5;
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости