Удалить строки из таблицы, когда конкретная строка из другой таблицы была удалена

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

Я попытался выяснить, как я могу удалить все контакты, принадлежащие этой группе, а также удалить группу.

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

Ну, если не все в порядке, это мой запрос, но 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 ответа

Решение

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.

В 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 ;

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

Вы не указываете свою RDBMS, но в SQL Server вы можете включить каскадное удаление, НО я бы не советовал делать это; это слишком опасно

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

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

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

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

Другие вопросы по тегам