2014-01-23 51 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。所以结果很明显!只有合格记录出来。

相关问题