嗨,我有一个表'ABC',主键为'ID',它是表XYZ中的外键,为'ID'。
我试图根据ID!='A'或ID!='A2'的条件从ABC中删除。我有两个查询。
DELETE FROM ABC WHERE ID NOT IN ('A','A2')
和
delete from ABC where ID !='A' or ID !='A2'
我认为两者在逻辑上是相同且正确的。但是在第二个我使用“ OR”条件的表中,我收到了XYZ表的完整性错误。
有人可以帮忙,并说为什么会发生这种情况。
编辑::对不起,那是错误的
这两个查询不相同。
第一个将条目保留ID
为'A'
或'A2'
。第二个删除ABC
表中的所有条目。
条件:
ID IN ('A', 'A2')
是相同的:
ID = 'A' OR ID = 'A2'
否定条件:
ID NOT IN ('A', 'A2')
是相同的:
NOT (ID = 'A' OR ID = 'A2')
根据德摩根法律,这与以下内容相同:
NOT (ID = 'A') AND NOT (ID = 'A2')
与以下内容相同:
ID != 'A' AND ID != 'A2'
您的条件(ID != 'A' OR ID != 'A2'
)会删除具有ID = 'A'
条件(ID != 'A2'
)另一半的行。具有的行也一样ID = 'A2'
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句