有人可以解释为什么这些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)
答案 0 :(得分:4)
第一个语句在subselect中本地检查是否存在两个表都有公共记录的记录。如果是这样,它将返回table2的所有记录。否则,它返回无行。外部table2和exists
中的子选择之间没有关系,您使用两个不相关的table2实例。
因此,这是一个全有或全无的结果:如果exists
有记录,那么外部table2的所有行的外部where条件为true,否则对于外部table2的所有行都为false。
第二个查询返回表2的相关记录,这些记录在table1中具有公共记录。
答案 1 :(得分:2)
Query#1
检查NOT EXISTS
是否有与Table1
和Table2
联接的数据,如果是,则会获取{{>所有记录Table2
1}},如果该连接失败但没有匹配,或否记录,如果找到至少一个匹配
Query#2
,对于Table2
中的每一行,加入Table1
并检查NOT EXISTS
是否为{{1}}。结果很明显!只有合格记录出来。