как удалить записи из нескольких дочерних таблиц в одном запросе - PullRequest
1 голос
/ 26 мая 2011

У меня есть модель базы данных, как это, Одна материнская таблица, назовем ее table_mother, а несколько дочерних таблиц. Связь между table_mother и childs такая:

Все дочерние таблицы имеют вид внешнего ключа в качестве идентификатора материнской таблицы (id_table_mother) (отношение равно 1-> n, поскольку id_table_mother равно uniq, и дочерний элемент tbale может получить несколько записей для id_table_mother)

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

           DELETE FROM tb_child_1,tb_child_2,tb_child_3
              WHERE 
tb_child_1.id_table_mother 
AND tb_child_2.id_table_mother 
AND tb_child_3.id_table_mother
              NOT IN (SELECT id_table_mother FROM tb_table_mother);

Thx

edit: вот так я и закончил

delete from tb_child_1 where id_mother not in (select id_mother from tb_mother_table);
delete from tb_child_2 where id_mother not in (select id_mother from tb_mother_table);

какое-нибудь "глобальное" решение? Кроме того, моя база данных не innodb, поэтому я не могу использовать иностранные ключи и прочее

Ответы [ 2 ]

1 голос
/ 26 мая 2011

Вы должны создать ограничения FOREIGN KEY, которые будут выполняться при удалении или обновлении, чтобы узнать больше о посещении ограничений FOREIGN KEY http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

0 голосов
/ 26 мая 2011

Напишите 3 запроса, как этот -

DELETE
  tb_child_1
FROM
  tb_table_mother
LEFT JOIN
  tb_child_1
   ON tb_table_mother.id_table_mother = tb_child_1.id_table_mother
WHERE
   tb_child_1.id_table_mother IS NULL;
...