Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
 почему так ?  [new]
nxx
Member

Откуда:
Сообщений: 1984
SQL> 
SQL> select 1
  2  from dual
  3  where 999 = all (select 1 from dual where 1=0)
  4  /
 
         1
----------
         1
 
SQL> 


почему ?
13 сен 17, 15:37    [20793121]     Ответить | Цитировать Сообщить модератору
 Re: почему так ?  [new]
Fogel
Member

Откуда:
Сообщений: 242
nxx
SQL> 
SQL> select 1
  2  from dual
  3  where 999 = all (select 1 from dual where 1=0)
  4  /
 
         1
----------
         1
 
SQL> 


почему ?



oradoc
ALL

Compares a value to every value in a list or returned by a query. Must be preceded by =, !=, >, <, <=, >=. Can be followed by any expression or subquery that returns one or more values.

Evaluates to TRUE if the query returns no rows .
13 сен 17, 15:53    [20793156]     Ответить | Цитировать Сообщить модератору
 Re: почему так ?  [new]
nxx
Member

Откуда:
Сообщений: 1984
Fogel
oradoc
ALL

Compares a value to every value in a list or returned by a query. Must be preceded by =, !=, >, <, <=, >=. Can be followed by any expression or subquery that returns one or more values.

Evaluates to TRUE if the query returns no rows .


хорошо, а почему сделали-то так ?
где логика ?
13 сен 17, 16:00    [20793175]     Ответить | Цитировать Сообщить модератору
 Re: почему так ?  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 4845
nxx
Fogel
пропущено...


хорошо, а почему сделали-то так ?
где логика ?
Представь, что ты пишешь функцию, котора принимает на вход
* атомарное значение
* массив
* оператор
Она возвращает false, если оператор возвращает false хотя бы для одного элемента массива, иначе true.
Какова будет твоя логика если массив пустой?
13 сен 17, 16:08    [20793208]     Ответить | Цитировать Сообщить модератору
 Re: почему так ?  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 2042
nxx
где логика ?
тебе кажется, что логики нет, поскольку для тестов ты используешь пример, не имеющий отношения к повседневной жизни
13 сен 17, 16:28    [20793275]     Ответить | Цитировать Сообщить модератору
 Re: почему так ?  [new]
nxx
Member

Откуда:
Сообщений: 1984
dbms_photoshop
Какова будет твоя логика если массив пустой?


операция сравнения с пустым множеством по хорошему должна выдавать null
уж точно не true
13 сен 17, 16:34    [20793298]     Ответить | Цитировать Сообщить модератору
 Re: почему так ?  [new]
nxx
Member

Откуда:
Сообщений: 1984
--Eugene--
nxx
где логика ?
тебе кажется, что логики нет, поскольку для тестов ты используешь пример, не имеющий отношения к повседневной жизни


изначально у меня было нечто типа

update master m
set flag1 = 'Y'
where 
'Y' = all (select flag2 from detail d where d.id = m.id)


при этом запись master с 0 detail вполне реальные данные
13 сен 17, 16:42    [20793330]     Ответить | Цитировать Сообщить модератору
 Re: почему так ?  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 2042
nxx
должна выдавать null
уж точно не true
тогда уж не NULL, а UNKNOWN
Nulls in Conditions
A condition that evaluates to UNKNOWN acts almost like FALSE. For example, a SELECT statement with a condition in the WHERE clause that evaluates to UNKNOWN returns no rows. However, a condition evaluating to UNKNOWN differs from FALSE in that further operations on an UNKNOWN condition evaluation will evaluate to UNKNOWN. Thus, NOT FALSE evaluates to TRUE, but NOT UNKNOWN evaluates to UNKNOWN.
13 сен 17, 16:50    [20793350]     Ответить | Цитировать Сообщить модератору
 Re: почему так ?  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 4845
nxx
dbms_photoshop
Какова будет твоя логика если массив пустой?


операция сравнения с пустым множеством по хорошему должна выдавать null
уж точно не true
Что, простите? Ты сравниваешь "элемент" с "множеством"? А где ты такую операцию встречал?

В нормальном мире операторы могут сравнивать операнды одного типа или приводимых типов.
В твоем случае выполняется поэлементное сравнение.
Изначальное состояние true, оно может стать false если будет хоть один элемент для которого сравнение вернет false.
13 сен 17, 17:05    [20793397]     Ответить | Цитировать Сообщить модератору
 Re: почему так ?  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 8645
dbms_photoshop
Изначальное состояние true, оно может стать false если будет хоть один элемент для которого сравнение вернет false.


Ну и чем тогда отличается:

SQL> select 1 from dual where 1 = (select 1 from dual where 1 = 2);

no rows selected

SQL> select 1 from dual where 1 = all (select 1 from dual where 1 = 2);

         1
----------
         1

SQL> 


SY.
13 сен 17, 17:17    [20793436]     Ответить | Цитировать Сообщить модератору
 Re: почему так ?  [new]
Сергей Арсеньев
Member

Откуда:
Сообщений: 4106
nxx
где логика ?

В школе, вестимо.
Учите, какие уnверждения верны про членов пустого множества. :)
13 сен 17, 17:20    [20793449]     Ответить | Цитировать Сообщить модератору
 Re: почему так ?  [new]
nxx
Member

Откуда:
Сообщений: 1984
dbms_photoshop
Изначальное состояние true, оно может стать false если будет хоть один элемент для которого сравнение вернет false.


вы не к тому придираетесь
"Изначальное состояние true" это особенности реализации
с точки зрения клиента как раз всё наоборот
(в выборке нет записей пока все условия не определены)
ну а как известно "клиент всегда прав"
13 сен 17, 17:25    [20793468]     Ответить | Цитировать Сообщить модератору
 Re: почему так ?  [new]
Сергей Арсеньев
Member

Откуда:
Сообщений: 4106
SY
Ну и чем тогда отличается:

Это даже не смешно.
SY
Ну и чем тогда отличается:
SQL> select 1 from dual where 1 = (select 1 from dual where 1 = 2);

Фраза в переводе на русский : Что один доллар Вам должны, что ничего все едино.

SY
SQL> select 1 from dual where 1 = all (select 1 from dual where 1 = 2);

Любой из несуществующих Ваших кредиторов может смело требовать с Вас доллар.
13 сен 17, 17:26    [20793476]     Ответить | Цитировать Сообщить модератору
 Re: почему так ?  [new]
Сергей Арсеньев
Member

Откуда:
Сообщений: 4106
SY,

Простите, у Вас не любой, у Вас каждый. Любой у ТС.
13 сен 17, 17:28    [20793481]     Ответить | Цитировать Сообщить модератору
 Re: почему так ?  [new]
nxx
Member

Откуда:
Сообщений: 1984
nxx
с точки зрения клиента как раз всё наоборот


т.е. изначальное состояние UNKNOWN с точки зрения клиента
13 сен 17, 17:30    [20793489]     Ответить | Цитировать Сообщить модератору
 Re: почему так ?  [new]
Сергей Арсеньев
Member

Откуда:
Сообщений: 4106
nxx
с точки зрения клиента

Задача программиста, как прикладного математика - в первую очередь правильно перевести хотелки клиента на язык математики. А потом уж решать задачу.
13 сен 17, 17:34    [20793508]     Ответить | Цитировать Сообщить модератору
 Re: почему так ?  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 4845
SY
Ну и чем тогда отличается
Это троллинг?
Оператор сравнения атомарных значений (одно из которых null) и поэлементное сравнение с элементами множества (которое в конкретном случае пустое).
13 сен 17, 17:34    [20793509]     Ответить | Цитировать Сообщить модератору
 Re: почему так ?  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 4845
nxx
dbms_photoshop
Изначальное состояние true, оно может стать false если будет хоть один элемент для которого сравнение вернет false.


вы не к тому придираетесь
"Изначальное состояние true" это особенности реализации
с точки зрения клиента как раз всё наоборот
(в выборке нет записей пока все условия не определены)
ну а как известно "клиент всегда прав"
Если цель была убедиться в своей "правоте" без попыток взглянуть на проблему под другим углом, то, думаю, она достигнута.
А вообще если ты когда-нибудь столкнешься с функциональным программированием то откроешь для себя новый дивный мир и логика станет логичнее.
Вне зависимости от "особенностей реализации".
13 сен 17, 17:36    [20793516]     Ответить | Цитировать Сообщить модератору
 Re: почему так ?  [new]
Сергей Арсеньев
Member

Откуда:
Сообщений: 4106
dbms_photoshop
SY
Ну и чем тогда отличается
Это троллинг?

Возможно SY имел ввиду, что путь пофантазировать на тему как надо бы писать, на месте индусов из Oracle, на Темную сторону ведет. :)
13 сен 17, 17:37    [20793519]     Ответить | Цитировать Сообщить модератору
 Re: почему так ?  [new]
nxx
Member

Откуда:
Сообщений: 1984
Сергей Арсеньев
nxx
с точки зрения клиента

Задача программиста, как прикладного математика - в первую очередь правильно перевести хотелки клиента на язык математики. А потом уж решать задачу.


ОК, объясните чисто по математике как там выходит true
13 сен 17, 17:39    [20793529]     Ответить | Цитировать Сообщить модератору
 Re: почему так ?  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 5516
nxx,

Вероятно, по симметрической разнице или по исключению.
13 сен 17, 17:43    [20793546]     Ответить | Цитировать Сообщить модератору
 Re: почему так ?  [new]
Сергей Арсеньев
Member

Откуда:
Сообщений: 4106
nxx,

Трудности с прочтением всего, что было выше?

Любое утверждение про члена пустого множества, которое не ложно по другим причинам и не противоречит пустоте множества - верно.

Как я уже сказал, все кто является Вашим несуществующим кредитором могут смело требовать с Вас 999 рублей. Так понятно?
13 сен 17, 17:43    [20793549]     Ответить | Цитировать Сообщить модератору
 Re: почему так ?  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 2042
nxx
ОК, объясните чисто по математике как там выходит true
.. запахло жареным
13 сен 17, 17:43    [20793550]     Ответить | Цитировать Сообщить модератору
 Re: почему так ?  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 5516
nxx,

А для каких целей Вы используете all в рамках своих задач?
13 сен 17, 17:48    [20793567]     Ответить | Цитировать Сообщить модератору
 Re: почему так ?  [new]
Сергей Арсеньев
Member

Откуда:
Сообщений: 4106
--Eugene--
запахло жареным

Запахло жареным, это, когда Элик модератора оскорбляет...

А тут, системные проблемы в образовательном процессе и его связи с экономикой.
13 сен 17, 17:50    [20793572]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
Все форумы / Oracle Ответить