您好我有一张带有主键'ID'的表'ABC',它是表XYZ中的外键'ID'。
我试图从ABC中删除,具体取决于ID!='A'或ID!='A2'的条件。我有两个问题。
DELETE FROM ABC WHERE ID NOT IN ('A','A2')
和
delete from ABC where ID !='A' or ID !='A2'
我认为两者在逻辑上都相同且正确。但是我在使用'OR'条件的第二个中获得XYZ表的完整性错误。
有人可以帮忙,告诉它为什么会这样。
编辑::抱歉这是错误的
答案 0 :(得分:6)
两个查询不是相同。
第一个条目使ID
'A'
或'A2'
的条目保持不变。第二个删除ABC
表中的所有条目。
条件:
ID IN ('A', 'A2')
与:
相同ID = 'A' OR ID = 'A2'
否定条件:
ID NOT IN ('A', 'A2')
与:
相同NOT (ID = 'A' OR ID = 'A2')
,根据De Morgan laws与:
相同NOT (ID = 'A') AND NOT (ID = 'A2')
与:
相同ID != 'A' AND ID != 'A2'
您的条件(ID != 'A' OR ID != 'A2'
)会删除ID = 'A'
行,因为它们与条件的另一半匹配(ID != 'A2'
)。具有ID = 'A2'
的行也是如此。