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

时间:2016-04-06 05:58:19

标签: sql access-vba ms-access-2010

我需要在表中更新Checkbox,如果另一个表中的相同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放置在表单的load事件中。我做错了什么?

编辑:我想做什么 -

TableA

ID    Name  Surname 
200   John  Mills

TableB

ID    Name  Surname
300   Jane  Mills

您注意到两个表中的“Surname”字段中都有匹配项。我希望在这种情况下检查Checkbox,但ID必须是不同的。

换句话说,如果有一个带有DIFFERENT ID的记录,我想将Checkbox设置为True,但其他一个字段是相同的。

1 个答案:

答案 0 :(得分:2)

使用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

如果具有不同ID的1条记录就足够了,您可以在同一主体上使用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)