Oracle中的OR或IN条件为负

时间:2016-12-07 11:20:05

标签: oracle

您好我有一张带有主键'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表的完整性错误。

有人可以帮忙,告诉它为什么会这样。

编辑::抱歉这是错误的

1 个答案:

答案 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'的行也是如此。