Как вставить, используя SELECT для таблицы и запроса - PullRequest
4 голосов
/ 30 января 2012

У меня проблема с доступом к UPDATE на основе JOIN.

Есть 2 оператора, которые мне нужно объединить:

SELECT a.f1, a.f2, a.f3
  FROM tableA a, viewB b
  WHERE a.f2 = b.f2 AND a.f3 = b.f3

viewB - это запрос, но работает нормально

UPDATE tableA a
  SET a.f1 = 'x'

тоже отлично работает.

Теперь я пытаюсь:

UPDATE tableA a, viewB b
  SET a.f1 = 'x'
  WHERE a.f2 = b.f2 AND a.f3 = b.f3

Сбой, Access говорит:

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

Это глупо, потому что в viewB нет поля, к которому прикасались.Я попробовал несколько других решений с FROM, JOIN Subselect, но не нашел решения.

Кто-нибудь знает разумное решение по этому поводу?

Ответы [ 5 ]

5 голосов
/ 30 января 2012

Попробуйте синтаксис update .. join:

update tableA a
inner join viewB b on a.f2 = b.f2 and a.f3 = b.f3
set a.f1 = 'x'

Или, альтернативно:

update tableA a
set a.f1 = 'x'
where exists (select * from viewB b where a.f2 = b.f2 and a.f3 = b.f3)
3 голосов
/ 30 января 2012

Используйте синтаксис объединения, а не синтаксис where для объединения таблиц:

UPDATE tableA AS a 
INNER JOIN viewB AS b
    ON (a.f2 = b.f2) AND (a.f3 = b.f3)
SET a.f1 = 'x';

Также обратите внимание, что это будет работать, только если viewB обновляется. Например, если viewB имеет GROUP BY или UNION, он не будет обновляться.


РЕДАКТИРОВАТЬ: Если viewB не обновляется, подзапрос вместо объединения поможет:

UPDATE tableA AS a
SET a.f1 = 'x'
WHERE EXISTS (SELECT *
              FROM viewB AS b
              WHERE (a.f2=b.f2) AND (a.f3=b.f3))
0 голосов
/ 30 января 2012

Иногда, когда Access сообщает, что вы не создаете обновляемый запрос, он реагирует на установку для свойства «уникальных записей» запроса значения «yes».

0 голосов
/ 30 января 2012
UPDATE tableA
  SET a.f1 = 'x'
  from  tableA a, viewB b
  WHERE a.f2 = b.f2 AND a.f3 = b.f3
0 голосов
/ 30 января 2012

нужно дать разрешения.Удалите только чтение из этой папки или файла MDB, чтобы можно было выполнить обновление, проверьте эту ссылку.

Операция должна использовать обновляемый запрос.(Microsoft JET Database Engine)

Тема форума ASp.net для: opreation должен использовать обновляемый запрос

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