Oracle中的OR或IN条件为负

SYM*_*YMA 2 oracle

嗨,我有一个表'ABC',主键'ID',表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表的完整性错误.

有人可以帮忙,告诉它为什么会发生.

编辑::抱歉这是错误的

axi*_*iac 6

这两个查询完全相同.

第一种保持具有条目ID任一'A''A2'.第二个删除ABC表中的所有条目.

条件:

ID IN ('A', 'A2')
Run Code Online (Sandbox Code Playgroud)

是相同的:

ID = 'A' OR ID = 'A2'
Run Code Online (Sandbox Code Playgroud)

否定条件:

ID NOT IN ('A', 'A2')
Run Code Online (Sandbox Code Playgroud)

是相同的:

NOT (ID = 'A' OR ID = 'A2')
Run Code Online (Sandbox Code Playgroud)

根据德摩根法律,它与以下内容相同:

NOT (ID = 'A') AND NOT (ID = 'A2')
Run Code Online (Sandbox Code Playgroud)

这与:

ID != 'A' AND ID != 'A2'
Run Code Online (Sandbox Code Playgroud)

您的condition(ID != 'A' OR ID != 'A2')删除了行,ID = 'A'因为它们匹配条件的另一半(ID != 'A2').具有相同的行ID = 'A2'.