2014-02-17 41 views
1

我使用的是oracle 11g。我想知道爲什麼這兩個查詢給出不同的答案?爲什麼這兩個選擇語句不'給出相同的答案

邏輯上它們是相同的:

select * from tableA where 
    exists (select * from tableB where tableA.ID != tableB.ID); 

    select * from tableA where 
    not exists (select * from tableB where tableA.ID = tableB.ID); 
中的第一個

我我選擇的是不存在的每一件事。

在第二個我沒有選擇一切存在。

音符(「存在」改變爲「不存在)和(」!=」改爲‘=’)

看起來一樣吧?但他們給完全不同的答案

回答

0

第一條語句返回。值從任意B值不同 第二條語句返回不同的A值從所有B值

3

這種說法很可能將在返回的所有值:

select * 
from tableA 
where exists (select * from tableB where tableA.ID != tableB.ID); 

行將唯一無法匹配的時間與中的所有行在TableB中的行相同,它們在ID中具有非空值。因此,如果TableB至少有兩行不同的id s,則將返回tableA中的所有行。

本聲明:

select * 
from tableA 
where not exists (select * from tableB where tableA.ID = tableB.ID); 

是說,存在TableB沒有idTableA相匹配的ID。這將是99%的時間。

+0

+1,但第一種情況可能有多於1行:第二行必須在ID字段中包含「空」。 – ThinkJet

+0

@ThinkJet。 。 。這是一個好點。謝謝。 –

相關問題