Oracle中的OR与IN条件相反
问题描述:
您好我有一个表'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表的完整性错误。
有人可以请帮助,并告诉它为什么会发生。
编辑::对不起,这是错误
答
这两个查询不相同。
第一个保留条目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'
的行也是如此。
不同列'team_tenant,id',所以不是(不一定)相同的逻辑。 – sagi
在第一个查询中使用ID列,在第二个查询中使用ID和team_tenant列。他们不一样。 –
对不起,这是错误的:) – SYMA