MS Access-子查询在Access中不起作用(SQL正常工作)

时间:2019-05-04 10:26:55

标签: sql database date ms-access

我有一个不寻常的问题。我在MS Access中创建一个应用程序,并且在创建代码时遇到错误。我首先自己寻找解决方案,最后找到了解决方案。通常,由于“愚蠢的错误”,我的Access代码无法正常工作。

在该线程中使用13个优点查看第二个答案:How do I perform update query with subquery in 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查询后,我希望基于两个表中的相同“ numerProjektu”来完成“数据”表中的“ ID_ewidencji”字段。查询后(照片2),我们可以看到它发生了。但是,访问会引发错误:操作必须使用更新表查询。

This is photo 1 This is photo 2

1 个答案:

答案 0 :(得分:0)

尝试使用以下措辞:

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中编写逻辑的更通俗易懂的方法。