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