powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / почему так ?
2 сообщений из 77, страница 4 из 4
почему так ?
    #39522756
arsenyev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
envЭта та самая комната с красными драконами?
Это комната в которой все драконы красные и им жутко интересен наш спор.
...
Рейтинг: 0 / 0
почему так ?
    #39522783
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nxxFogelпропущено...


хорошо, а почему сделали-то так ?
где логика ?
Логика здесь так стоит
Оператор вида
Код: plsql
1.
y compare_op ALL (subquery)


развертывается так:
(subquery) интерпретируется как множество X:
Код: plsql
1.
Set X  = {x:(subquery:Select x From subquery_source)}


=>y compare_op ALL (subquery) = y compare_op ALL (X)
compare_op ALL развертывается так:
Код: plsql
1.
Not exists (x:X: Not (y compare_op x))


[не существует такого элемента x в множестве X, определяемым результатом выполнения
subquery, для которого (y compare_op x) != true ]
Поэтому для
Код: plsql
1.
where 999 = all (select 1 from dual where 1=0)


результат сравнения - Истина (в множестве результатов возвращаемых (select 1 from dual where 1=0) нет элементов, поэтому не существует даже кандидата на то, чтобы дать Ложь
при сравнении с 999.
Элемента, способного не дать истину при сравнении с 999, не существует).

Наоборот,
Код: plsql
1.
y compare_op ANY (subquery)


развертывается как
Код: plsql
1.
Exists x:X: (y compare_op x)



Из этого следует, например, что
Код: plsql
1.
y = ANY (subquery)


эквивалентно
Код: plsql
1.
y IN (subquery)



Но
Код: plsql
1.
y != ANY (subquery)


не эквивалентно
Код: plsql
1.
y NOT IN (subquery)



Для ANY в этом случае достаточно существования хотя бы одного элемента {x:(subquery)}
для которого
Код: plsql
1.
(y != x) = true

,

а NOT IN разворачивается NOT (y = ANY (subquery)),
т.е. (y != x) = true должно выполнится для каждого x из subquery.
т.е. NOT IN эквивалентен y != ALL(subquery)
...
Рейтинг: 0 / 0
2 сообщений из 77, страница 4 из 4
Форумы / Oracle [игнор отключен] [закрыт для гостей] / почему так ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]