2013-03-24 3 views
1

У меня есть БД, как этотудалить несколько связанных строк из таблиц diffrent

table 1 : area 
+------------+ 
| id | name | 
+------------+ 
| 1 | area1 | 
+------------+ 

table 2 : area_members 
+------------------------+ 
| rel_area | rel_school | 
+------------------------+ 

table 3 : school 
+------------+ 
| id | name | 
+------------+ 

table 4 : school_members 
+---------------------------+ 
| rel_school | rel_student | 
+---------------------------+ 

table 5 : student 
+------------+ 
| id | name | 
+------------+ 

В этой таблице любой области есть несколько школ и любая школа имеет несколько студентов. Я хочу удалить любые вещи, связанные с «area1» (область, школы, студенты) из всех этих 5 таблиц, удалив область1.

Я пробовал несколько запросов JOIN и UNION, но я не мог исправить это. Может кто-нибудь мне помочь, пожалуйста? :)

ответ

2

Вы можете просто присоединиться к таблицам, а самая лучшая часть - MySQL позволяет удалять несколько таблиц только в одном запросе.

DELETE a, b, c, d, e 
FROM area a 
     INNER JOIN are_members b 
      ON a.ID = b.rel_area 
     INNER JOIN school c 
      ON b.rel_school = c.ID 
     INNER JOIN school_members d 
      ON c.ID = d.rel_school 
     INNER JOIN student e 
      ON d.rel_student = e.ID 
WHERE a.Name = 'area1' 

PS: пожалуйста резервную копию базы данных перед выполнением оператора выше

+1

он работает, спасибо a milion , но я не мог понять, почему вы использовали a, b, c, d, e , похоже, что это переименование таблицы, правда ли? – masoud

+1

приветствую вас: D' рад помочь .. –

+0

Это не основной оператор удаления, когда вы присоединяетесь к таблицам в инструкции delete, вы должны указать, где должны быть удалены записи. 'a, b, c, d, e' являются псевдонимом, заданным для каждой таблицы. –

0

при определении внешнего ключа вы можете указать, будет ли удалена запись влияет на другие записи, которые связаны с ним с внешним ключом есть опция, которую вы можете указать при объявлении внешнего ключа: при удалении каскада. Предположим, что таблица B относится к таблице A. если вы укажете при удалении каскада: это приведет к записи в таблице B быть удалены, если они связаны между собой запись в таблице , когда эта запись в таблице удаляется

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