【问题标题】:Update query based on multiple criteria only once per row每行仅更新一次基于多个条件的查询
【发布时间】:2019-08-22 17:50:05
【问题描述】:

我对 ms access(使用 access 2013)相当陌生,不幸的是我遇到了一个问题。

我目前正在处理包含 2 个表的更新查询。在表 1 中,我想根据多个条件用“1”更新列的所有字段。两个表中存在三个不同的标准。如果两个表中的 2 个条件完全相同并且表 2 中的一个条件大于表 1 中的一个条件,我只想更新该列。但是,不幸的是,即使所有条件都匹配,这并不意味着特定情况是独特。但是,我只想为表 2 的每个唯一行更新一次“1”。

所以基本上,我有问题:

  1. 关于我要进行的匹配的当前代码是否正确?
  2. 有什么方法可以告诉访问表 2 中的每个唯一行只更新一次?

非常感谢您的帮助!

这是我当前的代码:

UPDATE Table2 LEFT JOIN [Table1] ON (Table2.Criteria1 = [Table1].Criteria1) AND (Table2.[Criteria2] = [Table1].[Criteria2]) SET [Table1].Column = 1
WHERE (((Table2.[Criteria1])=[Table1].[Criteria1]) AND ((Table2.Criteria2)=[Table1].[Criteria2]) AND ((Table2.Criteria3)>=[Table1].[Criteria3]));

【问题讨论】:

    标签: ms-access ms-access-2013


    【解决方案1】:

    同一张表上的左连接和 where 用作内连接。查看您的代码似乎您需要在 table1 和 table2 之间连接以更新 table2。所以语法和条件应该是:

    UPDATE Table2 
        SET [Table1].Column = 1
    FROM Table2 
    INNER JOIN [Table1] ON Table2.Criteria1 = [Table1].Criteria1
        AND Table2.[Criteria2] = [Table1].[Criteria2]
        AND Table2.Criteria3>=[Table1].[Criteria3]
    

    但如果您只需要更新单行,您可以尝试使用匹配行产生的 min(id):

    UPDATE Table1 
    SET [Table1].Column = 1 
    WHERE Table1.ID  =  (
       SELECT MIN(ID) 
        FROM Table2 
        INNER JOIN [Table1] ON Table2.Criteria1 = [Table1].Criteria1 
        AND Table2.[Criteria2] = [Table1].[Criteria2] 
        AND Table2.Criteria3>=[Table1].[Criteria3] 
    )
    

    【讨论】:

    • 感谢您的快速回复!这确实有很大帮助。但是,我仍然遇到问题,即我只想在表 2 中的每行更新表 1 中的行一次(实际上只有一次)。不幸的是,即使使用我的 3 个标准,匹配仍然不是“唯一的”但我没有其他办法比这更接近。那么有什么办法可以告诉我只能更新表 1 中的每一行表 2 中的每一行?非常感谢!
    • 您在表中是否有一个主键,您只想更新一行? ..一个ID,一个rowid? ...
    • 是的,我确实有一个“ID”列作为表 1 中的主键
    • 你好。首先感谢您的帮助!我尝试运行查询,但不幸的是我收到“语法错误(缺少运算符)...”消息。 Access 标记了第一个“FROM”
    • 在第二个 AND 子句中显示确切的错误消息 .. 无论如何答案已更新 .. 删除 awron )并且错误;在子查询的 closinf 之前
    猜你喜欢
    • 2017-09-02
    • 2014-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多