MS Access - подзапрос не работает в Access (sql работает) - PullRequest
0 голосов
/ 04 мая 2019

У меня необычная проблема.Я создаю приложение в MS Access и при создании кода я столкнулся с ошибкой.Я начал с поиска решения самостоятельно и наконец нашел его.Как правило, мой код доступа не работает из-за «глупой ошибки».

Посмотрите на второй ответ с 13 преимуществами в этой теме: Как выполнить запрос на обновление с подзапросом в Access? Как видите, MS Access не позволяет выполнять подзапрос (?) В запросе.Я создал ту же среду в SQL Server, и она работала.Может ли кто-нибудь помочь мне переписать мой запрос?

SQL

UPDATE DANE_BUD_ALL_BR 
SET ID_ewidencji = (
  SELECT ID_ewidencji FROM Ewidencje 
  WHERE Ewidencje.E_numerProjektu LIKE DANE_BUD_ALL_BR.numerProjektu
)
WHERE Identyfikator IN (
  SELECT b.Identyfikator 
  FROM DANE_BUD_ALL_BR b INNER JOIN Ewidencje e 
  ON e.E_numerProjektu = b.numerProjektu 
  WHERE e.E_numerProjektu LIKE b.numerProjektu
);

Я бы хотел, чтобы запрос выполнялся так же, как в SQL Server - потому что он там работает.

// Есть две таблицы: 'ewidencje' и 'dane'.Они связаны с «ID_ewidencji», в обеих таблицах есть поле «numerProjektu» (игнорируйте тот факт, что это дублирование данных в базе данных).Фото 1 показывает данные перед запросом SQL.После моего запроса UPDATE я бы хотел, чтобы поле «ID_ewidencji» в таблице «data» было заполнено на основе одного и того же «numerProjektu» из обеих таблиц.После запроса (фото 2) мы видим, что это произошло.Однако при доступе возникает ошибка: операция должна использовать запрос таблицы обновления.

Это фото 1 Это фото 2

1 Ответ

0 голосов
/ 04 мая 2019

Попробуйте сформулировать это следующим образом:

UPDATE DANE_BUD_ALL_BR
    SET ID_ewidencji = (SELECT ID_ewidencji
                        FROM Ewidencje as e
                        WHERE e.E_numerProjektu LIKE DANE_BUD_ALL_BR.numerProjektu
                       )
    WHERE EXISTS (SELECT 1
                  FROM Ewidencje as e
                  WHERE e.E_numerProjektu LIKE DANE_BUD_ALL_BR.numerProjektu
                 );

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

РЕДАКТИРОВАТЬ:

Работает ли простой JOIN в MS Access?

UPDATE DANE_BUD_ALL_BR as bab INNER JOIN
       Ewidencje as e
       ON e.E_numerProjektu LIKE bab.numerProjektu
    SET bab.ID_ewidencji = e.ID_ewidencji;

Это более разговорный способ написания логики в MS Access.

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