Как удалить данные из нескольких таблиц в sqlite? - PullRequest
5 голосов
/ 14 ноября 2009

Я использую базу данных sqlite для хранения данных. У меня есть три таблицы: Счет-фактура, InvRow, Invdetails.

Соотношение между таблицами:

Invoice.Id = InvRow.InvId
InvRow.Id = Invdetails.RowId 

Мне нужно удалить связанные записи из трех таблиц, используя один запрос. Как я могу это сделать? Любая помощь?

Ответы [ 2 ]

8 голосов
/ 14 ноября 2009

SQLite до версии 3.6.19 (2009 г., 14 октября) не поддерживает ограничения внешнего ключа, но вы можете использовать триггеры для поддержания реляционной целостности .

Начиная с 3.6.19 , однако, SQLite поддерживает надлежащие ограничения внешнего ключа с предложениями ON [UPDATE|DELETE] CASCADE, которые будут делать то, что вы хотите.

5 голосов
/ 03 июня 2010

Алекс Б дает хороший ответ, но он не работает для меня. слишком много работы сейчас.

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

Я хотел: DELETE FROM movies, movie_pproviders WHERE movie.id = movie_providers.movie_id AND [my constraint]

но пришлось сделать 2 шага

DELETE FROM movies WHERE [my constraint]
DELETE FROM movie_providers where movie_id NOT IN (SELECT DISTINCT id FROM movies)

Это предполагает, что у меня была согласованность между фильмами и movie_providers прежде. Если нет, я просто создал последовательность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...