2016-12-07 70 views
2

您好我有一个表'ABC',主键'ID'是表XYZ中的外键,'ID'。Oracle中的OR与IN条件相反

我试图从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

不同列'team_tenant,id',所以不是(不一定)相同的逻辑。 – sagi

+1

在第一个查询中使用ID列,在第二个查询中使用ID和team_tenant列。他们不一样。 –

+0

对不起,这是错误的:) – SYMA

回答

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