2015-02-13 2 views
0

У меня около 10 таблиц, таких как: города, районы, города и т. Д. В них есть столбец school_id.Удалить из нескольких таблиц, где идентификатор не совпадает

Я хочу удалить school_id из всех таблиц, где нет соответствия в school_id по сравнению со школьной таблицей. Я могу сделать это легко для одной таблицы. Как это:

DELETE FROM cities 
WHERE school_id NOT IN (SELECT s.id 
         FROM schools s) 

Для таблицы районов:

DELETE FROM districts 
WHERE school_id NOT IN (SELECT s.id 
         FROM schools s) 

Мои вопросы есть способ объединить все эти вопросы в одном?

+0

возможности обновить дизайн схему БД Вы? вы должны установить school_id как внешний ключ и забыть об этом ручном задании, DB, поскольку он сам предотвратит подобные шумовые данные. –

+0

@ DanielAranda - Я не могу установить это как внешний ключ для всех таблиц. Он используется во многих таблицах. – NoviceMe

+0

@NoviceMe не может быть правильным словом для этого, «не хочу» больше нравится – arnoudhgz

ответ

0

Вы можете сделать это с помощью простого JOIN

delete a, b from cities a 
join districts b using(school_id) 
where school_id not in (select id from schools) 

добавить join для каждой таблицы удалены ..

delete a, b, c from cities a 
join districts b using(school_id) 
join tables3 c using(school_id) 
where school_id not in (select id from schools) 
+0

op сказал, что у него около 10 таблиц .. и как вы его достигаете, используя здесь соединение? –

+0

он может присоединиться к тому, сколько ему нужно (ну, на самом деле, это предел). –

+1

@ Jean-FrançoisSavard - Это не работает, если в одной таблице можно сказать, что в городах нет какой-либо school_id, которая отсутствует. Но в других таблицах нет идентификаторов, которые отсутствуют. – NoviceMe

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