我需要在表中更新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,但其他一个字段是相同的。
答案 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)