Oracle中OR或IN条件的取反

赛马

嗨,我有一个表'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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章