удалить строки из таблицы, если конкретная строка из другой таблицы была удалена - PullRequest
1 голос
/ 17 октября 2010

У меня есть группа, и у каждой группы есть контакты, связанные с ней.Когда пользователь удаляет группу, если группа не пуста, он предупреждает их о том, что все контакты в этой группе будут удалены, если они продолжатся.Ну, в любом случае, так что моя проблема заключается в настройке этой функции.

Я попытался выяснить, как я могу удалить все контакты, которые принадлежат к этой группе, а также удалить группу.продолжить Мне интересно, но существует ли своего рода автоматизированный способ сделать это через внешние ключи?

Ну, если не все в порядке, это мой запрос, но SQL Workbench выдает следующую ошибку

DELETE c
FROM `list_`.`contacts` AS c
INNER JOIN `list_`.`groups` AS g ON c.group_id = g.id
WHERE g.group = 'School' 
  AND c.user_id = 2;

ошибка:

Error Code: 1046 No database selected

действительно запутался здесь, также я также пытался c.*

Ответы [ 4 ]

2 голосов
/ 17 октября 2010

MySQL поддерживает удаление нескольких таблиц в одном операторе - используйте:

DELETE c, g
  FROM `list_`.`contacts` AS c
  JOIN `list_`.`groups` AS g ON c.group_id = g.id
                            AND g.group = 'School' 
 WHERE c.user_id = 2;

Что касается кода ошибки 1046, при использовании WorkBench убедитесь, что в базе данных выбрана соответствующая база данных / каталог.раскрывающееся меню над вкладкой «Обозреватель объектов».Вы можете указать схему / базу данных / каталог по умолчанию для соединения - выберите «Управление соединениями» под заголовком «Разработка SQL» заставки Workbench.

1 голос
/ 17 октября 2010

Вы не указали свою СУБД, но в SQL Server вы могли бы включить каскадное удаление, НО Я бы не советовал делать это;это слишком опасно.

Обновление : MySQL InnoDB также поддерживает каскадное удаление: Ограничения FOREIGN KEY

Безопаснее сначала вручную удалить всессылаются на строки, а затем удаляют группу.

Сообщение об ошибке "Error Code: 1046 No database selected" предполагает, что это НЕ ваш TSQL по ошибке.Вы указываете на базу данных?

1 голос
/ 17 октября 2010

В Mysql вы можете попробовать что-то вроде этого для триггера:

DELIMITER $$
DROP TRIGGER IF EXISTS `deluser`$$

CREATE TRIGGER `deluser` BEFORE DELETE on `biguser`
FOR EACH ROW
BEGIN
DELETE FROM smalluser WHERE id=OLD.id;
END$$

DELIMITER ;

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

0 голосов
/ 17 октября 2010

Я думаю, что вы можете сделать это с помощью триггера.

...