Access SQL-一个字段不存在,至少有一个字段存在

Access SQL-一个字段不存在,至少有一个字段存在,sql,ms-access,vba,ms-access-2010,Sql,Ms Access,Vba,Ms Access 2010,若另一个表中不存在相同的ID,但至少存在一个其他字段,我需要更新表中的复选框。以下是我所拥有的: UPDATE TableA INNER JOIN TableB_ ON TableB_Name=TableA.Name OR TableB.Surname=TableA.Surname AND NOT TableB.ID=TableA.ID SET TableA.Checkbox=True 此SQL被放置在表单的加载事件中。我做错了什么 编辑

若另一个表中不存在相同的ID,但至少存在一个其他字段,我需要更新表中的复选框。以下是我所拥有的:

UPDATE TableA
       INNER JOIN TableB_
       ON TableB_Name=TableA.Name OR TableB.Surname=TableA.Surname
       AND NOT TableB.ID=TableA.ID
       SET TableA.Checkbox=True
此SQL被放置在表单的加载事件中。我做错了什么

编辑:我想做的-

TableA

ID    Name  Surname 
200   John  Mills

TableB

ID    Name  Surname
300   Jane  Mills
您注意到,在这两个表中,姓氏字段中都有匹配项。我希望在这种情况下选中复选框,但ID必须不同

换句话说,如果存在具有不同ID的记录,但其中一个字段相同,我想将复选框设置为True。

使用不存在,您的查询将检查是否存在具有其他ID的记录,但不会检查所有记录是否具有其他ID:

UPDATE TableA
SET TableA.checkbox = true
WHERE NOT EXISTS(SELECT 1 FROM TableB
                 WHERE (TableB_Name=TableA.Name OR TableB.Surname=TableA.Surname)
                       AND TableB.ID=TableA.ID)
仅当不存在具有相同名称/姓氏和ID的记录时,才会将字段更新为true

如果1条具有不同ID的记录就足够了,则可以使用同一主体上的EXISTS:

UPDATE TableA
SET TableA.checkbox = true
WHERE EXISTS(SELECT 1 FROM TableB
             WHERE (TableB_Name=TableA.Name OR TableB.Surname=TableA.Surname)
                   AND TableB.ID<>TableA.ID)
可能您指的是一个组合,具有相同ID的记录不存在,但存在具有另一个ID的记录。。然后:

UPDATE TableA
SET TableA.checkbox = true
WHERE NOT EXISTS(SELECT 1 FROM TableB
                 WHERE (TableB_Name=TableA.Name OR TableB.Surname=TableA.Surname)
                       AND TableB.ID=TableA.ID)
 AND EXISTS(SELECT 1 FROM TableB
            WHERE (TableB_Name=TableA.Name OR TableB.Surname=TableA.Surname)
                  AND TableB.ID<>TableA.ID)
Use NOT EXISTS,您的查询将检查是否存在具有其他ID的记录,而不会检查是否所有记录都具有其他ID:

UPDATE TableA
SET TableA.checkbox = true
WHERE NOT EXISTS(SELECT 1 FROM TableB
                 WHERE (TableB_Name=TableA.Name OR TableB.Surname=TableA.Surname)
                       AND TableB.ID=TableA.ID)
仅当不存在具有相同名称/姓氏和ID的记录时,才会将字段更新为true

如果1条具有不同ID的记录就足够了,则可以使用同一主体上的EXISTS:

UPDATE TableA
SET TableA.checkbox = true
WHERE EXISTS(SELECT 1 FROM TableB
             WHERE (TableB_Name=TableA.Name OR TableB.Surname=TableA.Surname)
                   AND TableB.ID<>TableA.ID)
可能您指的是一个组合,具有相同ID的记录不存在,但存在具有另一个ID的记录。。然后:

UPDATE TableA
SET TableA.checkbox = true
WHERE NOT EXISTS(SELECT 1 FROM TableB
                 WHERE (TableB_Name=TableA.Name OR TableB.Surname=TableA.Surname)
                       AND TableB.ID=TableA.ID)
 AND EXISTS(SELECT 1 FROM TableB
            WHERE (TableB_Name=TableA.Name OR TableB.Surname=TableA.Surname)
                  AND TableB.ID<>TableA.ID)

你想做什么?请解释得更清楚些。你在期待什么?发生了什么事?@user4759923看到我编辑的问题了吗?你想做什么?请解释得更清楚些。你在期待什么?发生了什么?@user4759923查看我编辑过的问题查看我编辑过的答案,我不是在寻找不存在的记录,而是不存在的记录,它们的ID与TableB中的ID相同,并且其中一个字段与TableB中的字段相同。这就是我的第一个查询所做的@LuckyLuke82抱歉@sagi,我还没有看到你的第二个SQL,这很有效,谢谢!!。第一个不是,第二个。很抱歉,我现在已经完全测试过了-它不工作!当另一个字段为空时,它会工作,但如果两个字段都有值,则即使两个表中的ID相同,也会选中复选框。我应该使用你的第三个SQL建议还是什么?@LuckyLuke82是的,如果你需要的是那里说的话。它将前两者结合在一起:请看我编辑的答案,我不是在寻找不存在的记录,而是不存在与TableB中ID相同且字段之一与TableB中字段相同的记录。这就是我的第一个查询所做的@LuckyLuke82抱歉@sagi,我还没有看到你的第二个SQL,这很有效,谢谢!!。第一个不是,第二个。很抱歉,我现在已经完全测试过了-它不工作!当另一个字段为空时,它会工作,但如果两个字段都有值,则即使两个表中的ID相同,也会选中复选框。我应该使用你的第三个SQL建议还是什么?@LuckyLuke82是的,如果你需要的是那里说的话。它将前两者结合在一起: