Удалить запрос об ошибке: «укажите таблицу, содержащую записи, которые вы хотите удалить» - PullRequest
0 голосов
/ 15 июля 2011

Я хочу удалить все записи из таблицы "T", если записи также находятся в таблице D, но я получаю сообщение об ошибке "Укажите таблицу, содержащую записи, которые вы хотите удалить".

DELETE T.DISCOUNT_CODE, T.PART_ID, T.SELLING_UM, T.QTY_BREAK_1, T.QTY_BREAK_2, T.QTY_BREAK_3, T.QTY_BREAK_4, T.QTY_BREAK_5, T.QTY_BREAK_6, T.QTY_BREAK_7, T.QTY_BREAK_8, T.QTY_BREAK_9, T.QTY_BREAK_10, T.UNIT_PRICE_10, T.UNIT_PRICE_3, T.UNIT_PRICE_4, T.UNIT_PRICE_5, T.UNIT_PRICE_6, T.UNIT_PRICE_7, T.UNIT_PRICE_8, T.UNIT_PRICE_9, T.UNIT_PRICE_2, T.UNIT_PRICE_1, T.DEFAULT_UNIT_PRICE
 FROM SYSADM_DISCOUNT_PRICE AS T 
 INNER JOIN D ON T.PART_ID = D.PART_ID;

Ответы [ 3 ]

4 голосов
/ 15 июля 2011

Создайте новый запрос в Access, переключитесь на SQL View и вставьте его в:

DELETE 
FROM SYSADM_DISCOUNT_PRICE AS T
WHERE Exists (SELECT * FROM D WHERE D.PART_ID = T.PART_ID);

Это должно работать, если вы «запускаете» (выполняете) запрос.Если вы хотите просмотреть затронутые строки без фактического удаления, вы можете переключить представление конструктора запросов на представление таблицы данных.Это покажет вам, какие строки будут подлежать удалению, но Datasheet View только отображает их ... не удаляет их.Однако, чтобы переключиться на представление таблицы данных, вам нужно сообщить конструктору запросов, какие поля отображать.Вы можете сделать это, изменив первую строку на DELETE *.

Другой подход - изменить первую строку на SELECT *, чтобы просмотреть затронутые записи, а затем вернуться к УДАЛИТЬ, когда выготовы удалить их.

4 голосов
/ 15 июля 2011

Вы не указываете столбцы в операторе удаления. Вы также не можете присоединиться к операторам удаления.

В основном вы удаляете из таблицы. Итак, поместите всю свою условную логику в предложение where.

Где запись в (выберите .........)

1 голос
/ 15 июля 2011

MS Access позволяет присоединиться к удалению.Таким образом, вы можете написать свою инструкцию DELETE следующим образом, не называя столбцы.

DELETE T.*
FROM SYSADM_DISCOUNT_PRICE AS T 
INNER JOIN D ON T.PART_ID = D.PART_ID;
...