2014-01-23 82 views
-1

有人能有人能解釋爲什麼這些ORACLE SQL查詢的子查詢本地給予不同的輸出的Oracle SQL給予不同的輸出

select * from table2 
where not exists(select 1 from table1 a,table2 b where a.name = b.name and a.age = b.age) 


select * from table2 b 
where not exists(select 1 from table1 a where a.name = b.name and a.age = b.age) 
+1

子查詢中的「FROM」在哪裏? – user2989408

+1

它甚至運行良好? – Lobo

+1

是什麼讓「Oracle SQL不能正常工作」成爲這個問題的一個很好的標題? –

回答

4

第一條語句檢查是否有兩個表有一個共同的記錄的任何記錄。如果是,則返回全部表2的記錄。否則,它返回無行。外表2和exists中的子查詢之間沒有關係,您使用兩個不相關的table2實例。 因此,這是一個全部或全部結果:如果exists有記錄,那麼outer外部表2的所有行的外部條件爲true,否則外部表2的所有行都爲false。

第二個查詢返回table1中具有公共記錄的表2的相關記錄。

2

Query#1檢查爲NOT EXISTS數據出來的加入與Table1Table2,如果是的話,它提取ALL記錄Table2,如果聯接不匹配失敗,或NO記錄,如果ATLEAST找到一個匹配

Query#2,爲Table2各行,攜手與Table1並檢查它是否NOT EXISTS。所以結果很明顯!只有合格記錄出來。

相關問題