Удалить записи из нескольких таблиц в Access 2007 - PullRequest
2 голосов
/ 26 января 2011

Используя следующие данные, я пытаюсь удалить совпадающие записи из обеих таблиц.

Фрукты

Значение ID
1 яблоко
2 груши
3 банана
4 винограда

Животные

Значение ID
1 медведь
2 Обезьяна
3 Apple
4 свиньи

Между этими двумя таблицами нет определенной взаимосвязи.

Поскольку в обеих таблицах отображается «Apple», я хотел бы удалить эту запись из каждой из них.

Я пробовал следующий запрос, чтобы выполнить это:

DELETE DISTINCTROW Animals.*, Fruits.*
FROM Animals INNER JOIN Fruits ON Animals.Value = Fruits.Value;

Однако, когда я запускаю это, я получаю следующую ошибку:

Не удалось удалить из указанных таблиц.

Что я делаю не так, и что я могу сделать, чтобы это исправить?

1 Ответ

4 голосов
/ 26 января 2011

Без установления отношений, чтобы воспользоваться каскадным удалением, вам не повезло. Оператор DELETE работает с одной таблицей за раз (с каскадным удалением, если оно есть, выполняется за кулисами). У вас нет выбора, кроме как придумать что-то для достижения того, что вы хотите. Возможно, с помощью макроса можно сделать что-то упрощенное, например:

UPDATE Animals, Fruits SET Animals.Value="DELETED", Fruits.Value="DELETED" WHERE Animals.Value=Fruits.Value
DELETE Animals WHERE Animals.Value="DELETED"
DELETE Fruits WHERE Fruits.Value="DELETED"

Если не считать сложный макрос VBA (и, возможно, временную таблицу), это почти так же хорошо, как и получается.

Кроме того, я не верю, что это можно сделать даже с более тяжелыми БД, такими как SQL Server или DB2; УДАЛЕНИЕ для подзапроса или представления все еще требует, чтобы система БД могла преобразовать его в конкретную таблицу.

Я предполагаю, что ошибка, которую вы получили, связана с заблокированными строками (в результате INNER JOIN).

...