2014-01-23 17 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, вы используете два несвязанных экземпляра таблицы2. Следовательно, это результат целиком или ничего: если у exists есть записи, то внешний, где условие истинно для всех строк внешней таблицы2, в противном случае это значение false для всех строк внешней таблицы2.

Второй запрос возвращает связанные записи таблицы 2, которые имеют общую запись в таблице1.

2

Query#1 Проверка NOT EXISTS для данных из присоединиться Table1 и Table2, если да, то он получает ВСЕХ записи Table2, если присоединиться не удался без какого-либо матча, или NO записи, если по крайней мере один матч найден

в то время как Query#2, для каждой строки в Table2, присоединиться Table1 и проверить, если он NOT EXISTS. Итак, результат очевиден! Только Квалифицировано записей выходит.

Смежные вопросы