【问题标题】:MS Access - subquery does not work in Access (sql works)MS Access - 子查询在 Access 中不起作用(sql 有效)
【发布时间】:2019-09-22 16:43:18
【问题描述】:

我有一个不寻常的问题。我正在 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 查询之后,我希望“数据”表中的“ID_ewidencji”字段基于两个表中相同的“numerProjektu”来完成。查询后(照片 2)我们可以看到它发生了。但是,访问抛出一个错误:操作必须使用更新表查询。

This is photo 1 This is photo 2

【问题讨论】:

    标签: sql database date ms-access


    【解决方案1】:

    尝试将其表述为:

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

    【讨论】:

    • 我尝试了您的版本代码,但是当我尝试更新时,我仍然收到消息:操作必须使用更新表查询。我可以发一个测试基地,但我不知道如何将它附加到帖子中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多