ОБНОВЛЕНИЕ запроса из таблиц OUTER JOINed или производных таблиц - PullRequest
0 голосов
/ 30 декабря 2010

Есть ли способ в MS-Access обновить таблицу, в которой данные поступают из внешнего объединенного набора данных или производной таблицы? Я знаю, как это сделать в MSSQL, но в Access я всегда получаю ошибку «Операция должна использовать обновляемый запрос». Обновляемая таблица является обновляемой, исходные данные - нет. После прочтения ошибки Microsoft сообщает, что ошибка возникает, когда запрос нарушает ссылочную целостность. Я могу заверить, что этот набор данных не будет. Это ограничение наносит вред при попытке обновить большие наборы данных. Я также читал, что это можно исправить путем включения каскадных обновлений. Если это отношение между моими таблицами определено только в запросе, возможно ли это? Пока что запись набора данных во временную таблицу и последующее внутреннее объединение этого с таблицей обновлений - мое единственное решение; это невероятно неуклюже. Я хотел бы сделать что-то вроде этого:

UPDATE Table1 
    LEFT JOIN Table2 ON Table1.Field1=Table2.Field1
WHERE Table2.Field1 IS Null
SET Table1.Field1= Table2.Field2

или

UPDATE Table1 INNER JOIN
    (
        SELECT Field1, Field2
        FROM Table2, Table3 
        WHERE Field3=’Whatever’
    ) AS T2 ON Table1.Field1=T2.Field1
SET Table1.Field1= T2.Field2

Ответы [ 3 ]

1 голос
/ 31 декабря 2010

Обновление запросов очень проблематично в Access, как вы уже выяснили.

Идея временной таблицы - иногда единственный вариант.

Иногда использование объявления DISTINCTROW решает проблему (Query Properties -> Unique Records to 'Yes') и стоит попробовать.

Еще одна попытка - использовать псевдонимы на ваших таблицах, похоже, это также помогает движку JET.

0 голосов
/ 31 декабря 2010

Кажется, проблема в логике запроса. В первом примере вы ПРИСОЕДИНЯЕТЕСЬ К Table2 на Field1, но затем имеете

Table2.Field1 IS NULL 

в предложении WHERE. Таким образом, это ограничивает вас записями, в которых невозможно выполнить JOIN. Но затем вы пытаетесь обновить Таблицу 1 данными из Таблицы2, несмотря на отсутствие JOIN.

Возможно, вы могли бы объяснить, что вы пытаетесь сделать с этим запросом?

0 голосов
/ 30 декабря 2010
UPDATE Table3 
INNER JOIN 
(Table1 INNER JOIN Table2 ON Table1.uid = Table2.uid) 
ON 
(Table3.uid = Table2.uid) 
AND 
(Table3.uid = Table1.uid) 
SET 
Table2.field=NULL;

То, что я сделал, это: 1. Создано 3 таблицы 2. Установить отношения между ними 3. И использовал построитель запросов для обновления поля в таблице 2.

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