powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / почему так ?
77 сообщений из 77, показаны все 4 страниц
почему так ?
    #39520526
nxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SQL> 
SQL> select 1
  2  from dual
  3  where 999 = all (select 1 from dual where 1=0)
  4  /
 
         1
----------
         1
 
SQL> 



почему ?
...
Рейтинг: 0 / 0
почему так ?
    #39520533
Фотография Fogel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nxx
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SQL> 
SQL> select 1
  2  from dual
  3  where 999 = all (select 1 from dual where 1=0)
  4  /
 
         1
----------
         1
 
SQL> 



почему ?


oradocALL

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 .
...
Рейтинг: 0 / 0
почему так ?
    #39520539
nxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FogeloradocALL

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 .

хорошо, а почему сделали-то так ?
где логика ?
...
Рейтинг: 0 / 0
почему так ?
    #39520550
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nxxFogelпропущено...


хорошо, а почему сделали-то так ?
где логика ?Представь, что ты пишешь функцию, котора принимает на вход
* атомарное значение
* массив
* оператор
Она возвращает false, если оператор возвращает false хотя бы для одного элемента массива, иначе true.
Какова будет твоя логика если массив пустой?
...
Рейтинг: 0 / 0
почему так ?
    #39520563
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nxxгде логика ?тебе кажется, что логики нет, поскольку для тестов ты используешь пример, не имеющий отношения к повседневной жизни
...
Рейтинг: 0 / 0
почему так ?
    #39520566
nxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopКакова будет твоя логика если массив пустой?

операция сравнения с пустым множеством по хорошему должна выдавать null
уж точно не true
...
Рейтинг: 0 / 0
почему так ?
    #39520577
nxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--Eugene--nxxгде логика ?тебе кажется, что логики нет, поскольку для тестов ты используешь пример, не имеющий отношения к повседневной жизни

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

Код: plsql
1.
2.
3.
4.
update master m
set flag1 = 'Y'
where 
'Y' = all (select flag2 from detail d where d.id = m.id)



при этом запись master с 0 detail вполне реальные данные
...
Рейтинг: 0 / 0
почему так ?
    #39520581
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
...
Рейтинг: 0 / 0
почему так ?
    #39520590
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nxxdbms_photoshopКакова будет твоя логика если массив пустой?

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

В нормальном мире операторы могут сравнивать операнды одного типа или приводимых типов.
В твоем случае выполняется поэлементное сравнение.
Изначальное состояние true, оно может стать false если будет хоть один элемент для которого сравнение вернет false.
...
Рейтинг: 0 / 0
почему так ?
    #39520602
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopИзначальное состояние true, оно может стать false если будет хоть один элемент для которого сравнение вернет false.

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

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
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.
...
Рейтинг: 0 / 0
почему так ?
    #39520604
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nxxгде логика ?
В школе, вестимо.
Учите, какие уnверждения верны про членов пустого множества. :)
...
Рейтинг: 0 / 0
почему так ?
    #39520610
nxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopИзначальное состояние true, оно может стать false если будет хоть один элемент для которого сравнение вернет false.

вы не к тому придираетесь
"Изначальное состояние true" это особенности реализации
с точки зрения клиента как раз всё наоборот
(в выборке нет записей пока все условия не определены)
ну а как известно "клиент всегда прав"
...
Рейтинг: 0 / 0
почему так ?
    #39520612
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYНу и чем тогда отличается:
Это даже не смешно.
SYНу и чем тогда отличается:
Код: plsql
1.
SQL> select 1 from dual where 1 = (select 1 from dual where 1 = 2);


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

SY
Код: plsql
1.
SQL> select 1 from dual where 1 = all (select 1 from dual where 1 = 2);


Любой из несуществующих Ваших кредиторов может смело требовать с Вас доллар.
...
Рейтинг: 0 / 0
почему так ?
    #39520614
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY,

Простите, у Вас не любой, у Вас каждый. Любой у ТС.
...
Рейтинг: 0 / 0
почему так ?
    #39520616
nxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nxxс точки зрения клиента как раз всё наоборот


т.е. изначальное состояние UNKNOWN с точки зрения клиента
...
Рейтинг: 0 / 0
почему так ?
    #39520620
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nxx с точки зрения клиента
Задача программиста, как прикладного математика - в первую очередь правильно перевести хотелки клиента на язык математики. А потом уж решать задачу.
...
Рейтинг: 0 / 0
почему так ?
    #39520621
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYНу и чем тогда отличаетсяЭто троллинг?
Оператор сравнения атомарных значений (одно из которых null) и поэлементное сравнение с элементами множества (которое в конкретном случае пустое).
...
Рейтинг: 0 / 0
почему так ?
    #39520623
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nxxdbms_photoshopИзначальное состояние true, оно может стать false если будет хоть один элемент для которого сравнение вернет false.

вы не к тому придираетесь
"Изначальное состояние true" это особенности реализации
с точки зрения клиента как раз всё наоборот
(в выборке нет записей пока все условия не определены)
ну а как известно "клиент всегда прав"Если цель была убедиться в своей "правоте" без попыток взглянуть на проблему под другим углом, то, думаю, она достигнута.
А вообще если ты когда-нибудь столкнешься с функциональным программированием то откроешь для себя новый дивный мир и логика станет логичнее.
Вне зависимости от "особенностей реализации".
...
Рейтинг: 0 / 0
почему так ?
    #39520625
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopSYНу и чем тогда отличаетсяЭто троллинг?
Возможно SY имел ввиду, что путь пофантазировать на тему как надо бы писать, на месте индусов из Oracle, на Темную сторону ведет. :)
...
Рейтинг: 0 / 0
почему так ?
    #39520629
nxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арсеньевnxx с точки зрения клиента
Задача программиста, как прикладного математика - в первую очередь правильно перевести хотелки клиента на язык математики. А потом уж решать задачу.

ОК, объясните чисто по математике как там выходит true
...
Рейтинг: 0 / 0
почему так ?
    #39520632
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nxx,

Вероятно, по симметрической разнице или по исключению.
...
Рейтинг: 0 / 0
почему так ?
    #39520633
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nxx,

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

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

Как я уже сказал, все кто является Вашим несуществующим кредитором могут смело требовать с Вас 999 рублей. Так понятно?
...
Рейтинг: 0 / 0
почему так ?
    #39520634
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nxxОК, объясните чисто по математике как там выходит true.. запахло жареным
...
Рейтинг: 0 / 0
почему так ?
    #39520640
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nxx,

А для каких целей Вы используете all в рамках своих задач?
...
Рейтинг: 0 / 0
почему так ?
    #39520642
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--Eugene--запахло жареным
Запахло жареным, это, когда Элик модератора оскорбляет...

А тут, системные проблемы в образовательном процессе и его связи с экономикой.
...
Рейтинг: 0 / 0
почему так ?
    #39520644
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
envА для каких целей Вы используете all в рамках своих задач?по идее, ему грамотнее было бы задействовать NOT EXISTS в данном случае.
ошибаюсь?
...
Рейтинг: 0 / 0
почему так ?
    #39520651
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopПредставь, что ты пишешь функцию, котора принимает на вход
* атомарное значение
* массив
* оператор
Она возвращает false, если оператор возвращает false хотя бы для одного элемента массива, иначе true.
Какова будет твоя логика если массив пустой?Представь, что ты пишешь функцию, которая возвращает длину строки в символах. Какова будет твоя логика, если строка пустая?
...
Рейтинг: 0 / 0
почему так ?
    #39520652
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арсеньевкак надо бы писать, на месте индусов из OracleВо время реализации этой логики Индия ещё была отсталой страной.
...
Рейтинг: 0 / 0
почему так ?
    #39520653
XMLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKaddbms_photoshopПредставь, что ты пишешь функцию, котора принимает на вход
* атомарное значение
* массив
* оператор
Она возвращает false, если оператор возвращает false хотя бы для одного элемента массива, иначе true.
Какова будет твоя логика если массив пустой?Представь, что ты пишешь функцию, которая возвращает длину строки в символах. Какова будет твоя логика, если строка пустая?

Неудачный пример, в нем нет множества. А речь именно о нем.
...
Рейтинг: 0 / 0
почему так ?
    #39520655
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopЭто троллинг?
Оператор сравнения атомарных значений (одно из которых null) и поэлементное сравнение с элементами множества (которое в конкретном случае пустое).

Пока я вижу только твою ничем не подтвержденную интерпретацию. Все что ecть в документации это "Compares a value to every value in a list or returned by a query". Ну да ладно. Примем твою интерпретацию. X= ALL (subquery) сравнивает поэлементно. Ну а что тогда делает X= (subquery)? Чем это отличается от X= ALL (subquery) кроме как в первом случае возвращаемое множество ограничено одним элементом?

SY.
...
Рейтинг: 0 / 0
почему так ?
    #39520658
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XMLerНеудачный пример, в нем нет множества. А речь именно о нем.AmKadпропущено...
Представь, что ты пишешь функцию, которая возвращает длину строки в символах количество элементов коллекции (aka CARDINALIRY() ). Какова будет твоя логика, если строка коллекция пустая?
...
Рейтинг: 0 / 0
почему так ?
    #39520659
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY,

Если посмотреть, как строится план, то оптимизатор смотрит по логике "не существует ни одного элемента в множестве, значение которого не совпадает с указанным элементом".

Т.е. для такого запроса -filter : not exists (... where null is not null)
...
Рейтинг: 0 / 0
почему так ?
    #39520661
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я думаю все сводится к тому что ALL/ANY/SOME попaли в Oracle через жeлание Oracle соответствовать SQL стандартам и Oracle с нетрадиционной ориентацией на NULL пришлось приспосабливаться.

SY.
...
Рейтинг: 0 / 0
почему так ?
    #39520662
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYdbms_photoshopЭто троллинг?
Оператор сравнения атомарных значений (одно из которых null) и поэлементное сравнение с элементами множества (которое в конкретном случае пустое).

Пока я вижу только твою ничем не подтвержденную интерпретацию. Все что ecть в документации это "Compares a value to every value in a list or returned by a query". Ну да ладно. Примем твою интерпретацию. X= ALL (subquery) сравнивает поэлементно. Ну а что тогда делает X= (subquery)? Чем это отличается от X= ALL (subquery) кроме как в первом случае возвращаемое множество ограничено одним элементом?

SY.
Код: plaintext
скаляр = скаляр
выполняет сравнение двух атомарных значений
Код: plaintext
скаляр = any множество
выполняет проход по множеству до нахождение первого true (изначальное состояние false)
Код: plaintext
скаляр = all множество
выполняет проход по множеству до нахождения первого false (изначальное состояние true)
...
Рейтинг: 0 / 0
почему так ?
    #39520666
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKaddbms_photoshopПредставь, что ты пишешь функцию, котора принимает на вход
* атомарное значение
* массив
* оператор
Она возвращает false, если оператор возвращает false хотя бы для одного элемента массива, иначе true.
Какова будет твоя логика если массив пустой?Представь, что ты пишешь функцию, которая возвращает длину строки в символах. Какова будет твоя логика, если строка пустая?Если мы затронули пустые строки, то воспользуясь случаем замечу, что Оракловая реализация отстой.
Вот результат для Impala и он представляется мне абсолютно логичным.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
> select id, length(id) l from (select '1' id union all select '' id union all select null id) t;
+------+------+
| id   | l    |
+------+------+
| 1    | 1    |
|      | 0    |
| NULL | NULL |
+------+------+
...
Рейтинг: 0 / 0
почему так ?
    #39520668
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopпредставляется мне абсолютно логичнымнеееее
а как же прививание с пеленок идеи тождественности пустой строки и NULL?
...
Рейтинг: 0 / 0
почему так ?
    #39520669
XMLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--Eugene--Представь, что ты пишешь функцию, которая возвращает длину строки в символах количество элементов коллекции (aka CARDINALIRY() ). Какова будет твоя логика, если строка коллекция пустая?[/quot]
опять мимо
...
Рейтинг: 0 / 0
почему так ?
    #39520670
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--Eugene--Представь, что ты пишешь функцию, которая возвращает длину строки в символах количество элементов коллекции (aka CARDINALIRY() ). Какова будет твоя логика, если строка коллекция пустая?Согласно доке ожидал null, но не тут-то было. Видимо я не знаю, что такое empty table.
http://docs.oracle.com/cd/E11882_01/server.112/e41084/functions022.htm#SQLRF06305 If the nested table is empty, or is a null collection, then CARDINALITY returns NULL
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
create or replace type t_number_table is table of number;
/

Тип создан.


select cardinality(cast(collect(1) as t_number_table)) c1, cardinality(cast(null as t_number_table)) c2
from dual
where 1=0;

        C1         C2
---------- ----------
         0
...
Рейтинг: 0 / 0
почему так ?
    #39520671
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopЕсли мы затронули пустые строки, то воспользуясь случаем замечу, что Оракловая реализация отстой.Здесь я могу с тобой согласиться. Но поведение = all при no rows returned я считаю нелогичным. Можете кидать в меня камнями.
...
Рейтинг: 0 / 0
почему так ?
    #39520672
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
SQL> select cardinality(cast(collect(1) as t_number_table)) c1,
  2         cardinality(cast(null as t_number_table)) c2,
  3         cardinality(t_number_table()) c3
  4  from dual;

        C1         C2         C3
---------- ---------- ----------
         1                     0


Так что не устраивает?
...
Рейтинг: 0 / 0
почему так ?
    #39520674
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshop
Код: plsql
1.
  3         cardinality(t_number_table()) c3


Это empty table?
...
Рейтинг: 0 / 0
почему так ?
    #39520675
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopТак что не устраивает?расхождение с докой:докаIf the nested table is empty , or is a null collection, then CARDINALITY returns NULL не?
...
Рейтинг: 0 / 0
почему так ?
    #39520678
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadЭто empty table? IS EMPTY
...
Рейтинг: 0 / 0
почему так ?
    #39520683
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--Eugene-- IS EMPTY Ну вот:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
select
case when c1 is empty then 'c1 is empty' else 'c1 is not empty' end c1, cardinality(c1) card1,
case when c2 is empty then 'c2 is empty' else 'c2 is not empty' end c2, cardinality(c2) card2,
case when c3 is empty then 'c3 is empty' else 'c3 is not empty' end c3, cardinality(c3) card3
from
(select cast(collect(1) as t_number_table) c1, cast(null as t_number_table) c2, t_number_table() c3
  from dual
  where 1=0
);

C1                   CARD1 C2                   CARD2 C3                   CARD3
--------------- ---------- --------------- ---------- --------------- ----------
c1 is empty              0 c2 is not empty            c3 is empty              0
...
Рейтинг: 0 / 0
почему так ?
    #39520686
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--Eugene--dbms_photoshopТак что не устраивает?расхождение с докой:докаIf the nested table is empty , or is a null collection, then CARDINALITY returns NULL не?Да, тут по видимому две проблемы.
Во первых расхождение с докой, а во-вторых криво работает.

Логично, если EMPTY - 0, null collection - null.

Но для первой коллекции я ожидал 1 в результате.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
SQL> select
  2  cardinality(c1) cc1,
  3  case when c1 is empty then 'EMPTY' end e1,
  4  cardinality(c2) cc2,
  5  case when c2 is empty then 'EMPTY' end e2,
  6  cardinality(c3) cc3,
  7  case when c3 is empty then 'EMPTY' end e3,
  8  cardinality(c4) cc4,
  9  case when c4 is empty then 'EMPTY' end e4
 10  from
 11  (select cast(collect(cast(null as number)) as t_number_table) c1,
 12          cast(null as t_number_table) c2,
 13          t_number_table() c3,
 14          t_number_table(null) c4
 15  from dual) t;

       CC1 E1           CC2 E2           CC3 E3           CC4 E4
---------- ----- ---------- ----- ---------- ----- ---------- -----
         0 EMPTY                           0 EMPTY          1
...
Рейтинг: 0 / 0
почему так ?
    #39520689
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--Eugene--,

Подлец ты все-таки, увел обсуждение от all к cardinality.
...
Рейтинг: 0 / 0
почему так ?
    #39520696
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshop,

И почему-же у ANY изначальное FALSE а у ALL изначальное TRUE? Круг замкнулся. Не говоря о том что это уже implementation так-как для ANY прoще искать одно соответствие (и посему установить изначальное в FALSE) а для ALL одно не соответствие (и посему установить изначальное в TRUE). Вопрос в том что есть результат сравнения скалярa с элементом пустого множества (TRUE/FALSE/UNKNOWN)?

Согласно SQL in Nutshell, 3rd edition by Kevin Kline это заложено в SQL стандарт:



SQL2003 Syntax
SELECT ...
WHERE expression comparison {ALL | ANY | SOME} ( subquery )


Keywords

WHERE expression
Tests a scalar expression (such as a column) against every value in the subquery for ALL, and against every value until a match is found for ANY and SOME. All rows must match the expression to return a Boolean TRUE value for the ALL operator, while one or more rows must match the expression to return a Boolean TRUE value for the ANY and SOME operators.
comparison
Compares the expression to the subquery. The comparison must be a standard comparison operator like =, <>, !=, >, >=, <, or <=.


Rules at a Glance

The ALL operator returns a Boolean TRUE value when one of two things happens: either the subquery returns an empty set (i.e., no records), or every record in the set meets the comparison. ALL returns FALSE when any record in the set does not match the value comparison. The ANY and SOME operators return a Boolean TRUE when at least one record in the subquery matches the comparison operation, and FALSE when no record matches the comparison operation (or when a subquery returns an empty result set). If even one return value of the subquery is NULL, the operation evaluates as NULL, not as TRUE.

SY.
...
Рейтинг: 0 / 0
почему так ?
    #39520697
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopдля первой коллекции я ожидал 1 в результате.что-то ниже спины подсказывает мне, что CARDINALITY не считает NULL..
...
Рейтинг: 0 / 0
почему так ?
    #39520701
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicВо время реализации этой логики Индия ещё была отсталой страной.
Главное, что логика была и есть по сей день.
...
Рейтинг: 0 / 0
почему так ?
    #39520702
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XMLerНеудачный пример, в нем нет множества. А речь именно о нем.
Как раз есть - упорядоченное. Но пример показывает, что логика ущербна.

А вот требование пустоты задает не так много вариантов ответа.
...
Рейтинг: 0 / 0
почему так ?
    #39520704
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicВо время реализации этой логики Индия ещё была отсталой страной.
В том смысле, что важна не реализация (индусы, индийцы или индейцы не суть), а то, откуда росли ноги реляционной агебры.
...
Рейтинг: 0 / 0
почему так ?
    #39520712
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYИ почему-же у ANY изначальное FALSE а у ALL изначальное TRUE?Видимо для того, чтоб имело смысл переключать true -> false и false -> true а не false -> false.
SYНе говоря о том что это уже implementation так-как для ANY прoще искать одно соответствие (и посему установить изначальное в FALSE) а для ALL одно не соответствие (и посему установить изначальное в TRUE).Так и делается. Рекомендую перечитать мое сообщение еще раз.
SYВопрос в том что есть результат сравнения скалярa с элементом пустого множества (TRUE/FALSE/UNKNOWN)?Касательно обсуждения оксюморонов типа "элемент пустого множества" это не ко мне. Пустое множество на то и пустое, что в нем нет элементов.

А то, что пустое множество в случае скаляра преобразуется в NULL ну так это особенности SQL.
...
Рейтинг: 0 / 0
почему так ?
    #39520716
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadНу вотЕсли всмонить о том, что сначала выполняется where а потом группировка, то все становится на свои места.
Твоя collect как раз и добавляет группировку по константам в запрос.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
SQL> select x from
  2  (select cast(collect(1) as t_number_table) c,
  3          1 x
  4     from dual
  5    where 1=0
  6  );

         X
----------
         1

SQL> select x from
  2  (select --cast(collect(1) as t_number_table) c,
  3          1 x
  4     from dual
  5    where 1=0
  6  );

no rows selected
...
Рейтинг: 0 / 0
почему так ?
    #39520761
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYИ почему-же у ANY изначальное FALSE а у ALL изначальное TRUE?

Ребят, я вам удивляюсь. У меня дочка в 5 классе понимала почему из утверждения
"В этой комнате все драконы красные" не следует - "в этой комнате есть хотя бы один красный дракон".
...
Рейтинг: 0 / 0
почему так ?
    #39520764
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKaddbms_photoshopЕсли мы затронули пустые строки, то воспользуясь случаем замечу, что Оракловая реализация отстой.Здесь я могу с тобой согласиться. Но поведение = all при no rows returned я считаю нелогичным. Можете кидать в меня камнями.Его можно считать НЕинтуитивным и тут я даже могу с тобой согласиться, но ошибочно считать нелогичным.

Как я уже заметил, взглянуть по новому помогает понимание функционального программирования и в частности понятия tail-recursive .

Например, в той же scala, если цель проверить равенство элемента всем элементам множества,
то выполняется проверка для первого элемента и рекурсивный вызов прокерки для оставшихся.
Останов происходит либо когда получили НЕравенство либо когда множество пустое.
При этом, когда множество пустое мы НЕ знаем оно было изначально пустым или мы пришли на последний уровень рекурсии.
И это НЕ особенность реализации.

Так что я лишний раз бы рекомендовал не зацикливать свою жизнь на Оракле, а изучать другие языки и инструменты.
Поизучай scala и просто попытайся написать проверку с использованием функционального подхода.
Потом люди, способные мыслить только императивно будут вызывать у тебя лишь улыбку или сожаление...
или что-то еще в зависимости от того насколько агрессивно и самоуверенно они остаивают свою правоту.
...
Рейтинг: 0 / 0
почему так ?
    #39520768
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad,

Кто-то может спросить, при чем здесь функциональное программирование?
При том, что во-первых дает возможность взглянуть на ситуацию под другим углом, во-вторых плавнее перейти к булевой алгебре.

Недавно уже возникала ситуация, чтоб на равных обсуждать проблему надо иметь хотя бы примерно равный фундамент знаний.

В великолепной резонансной теме ( regexp_like ) я порекомендовал авторше почитать про конечные автоматы,
если она хочет продолжить разговор на тему почему задача не разрешима регулярными выражениями,
но почему-то мой пост с ссылкой потерли, при том что я там никого не оскорблял.
Что как бы намекает на компетенцию модераторов (точнее отдельного кадра (видимо tru55) который решил потереть то, что было написано).
...
Рейтинг: 0 / 0
почему так ?
    #39520781
nxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей АрсеньевSYИ почему-же у ANY изначальное FALSE а у ALL изначальное TRUE?

Ребят, я вам удивляюсь. У меня дочка в 5 классе понимала почему из утверждения
"В этой комнате все драконы красные" не следует - "в этой комнате есть хотя бы один красный дракон".

вот это вообще не про то
я второго не утверждал

логика была другая

- проверим что "В этой комнате все драконы красные"
- в этой комнате 0 драконов
- следовательно в этой комнате 0 красных драконов
- следовательно утверждение "В этой комнате все драконы красные" неверно

PS
мне казалось что sql задумывался для аналитиков, поближе к естественному языку
...
Рейтинг: 0 / 0
почему так ?
    #39520785
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nxxмне казалось что sql задумывался для аналитиков, поближе к естественному языкуА ты логику в универе учил? Квантор всеобщности, квантор существования и всё такое?

Утверждение
Код: plaintext
Для всех элементов множества выполняется равенство с х
тождественно эквивалентно
Код: plaintext
Не существует элемента множества такого, что НЕ выполняется равенство с х
...
Рейтинг: 0 / 0
почему так ?
    #39520799
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nxxa- проверим что "В этой комнате все драконы красные"
b- в этой комнате 0 драконов
c- следовательно в этой комнате 0 красных драконов
d- следовательно утверждение "В этой комнате все драконы красные" неверно
В школу.
Переход из с в d неверный. Никакой связи между этими утверждениями нет.
Ибо утверждение "В этой комнате все драконы красные. неверно" тождественно равно утверждению "в комнате есть не красный дракон".

Учите логику. Без неё в программировании делать нечего.
...
Рейтинг: 0 / 0
почему так ?
    #39520844
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей АрсеньевВ том смысле, что важна не реализация (индусы, индийцы или индейцы не суть), а то, откуда росли ноги реляционной агебры.Откуда бы они не росли, я не вижу извинений перед индусами.
...
Рейтинг: 0 / 0
почему так ?
    #39520972
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicОткуда бы они не росли, я не вижу извинений перед индусами.
Ты прав это не вина индусов, что они все сделали правильно. Не многие на это способны.
...
Рейтинг: 0 / 0
почему так ?
    #39520982
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, некоторые думают, что
авторОсновная особенность NULLа заключается в том, что он не равен ничему, даже другому NULL
так вот, это не совсем так:
Код: plsql
1.
2.
select 'null равен члену пустого множества'|| case when null=null then ' и равен самому себе' else ', но не равен самому себе' end from dual
 where null = all (select 1 from dual where 1=0)
...
Рейтинг: 0 / 0
почему так ?
    #39520984
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
выше пропущено слово любому
...
Рейтинг: 0 / 0
почему так ?
    #39521045
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арсеньев
Код: plsql
1.
null равен члену пустого множества

Подобные формулировки только запутывают имхо.
Во-первых, "= any" не бинарная операция и по сути вообще никакого сравнения не выполнялось.
Во-вторых, раз ты так же уверенно как SY используещь формулировку "члену пустого множества" может приведешь определение что это?
Или это нельзя понять, а можно только почувствовать? :))
...
Рейтинг: 0 / 0
почему так ?
    #39521060
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopСергей Арсеньев
Код: plsql
1.
null равен члену пустого множества

Подобные формулировки только запутывают имхо.
Во-первых, "= all" (и "= any" тоже) не бинарная операция и по сути вообще никакого сравнения не выполнялось.
Во-вторых, раз ты так же уверенно как SY используещь формулировку "члену пустого множества" может приведешь определение что это?
Или это нельзя понять, а можно только почувствовать? :))Fixed.
...
Рейтинг: 0 / 0
почему так ?
    #39521063
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арсеньеввыше пропущено слово любомуПосле введения квантора стало получше.
Что-то у меня проблемы с концентрацией сегодня.
...
Рейтинг: 0 / 0
почему так ?
    #39522588
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей АрсеньевSYИ почему-же у ANY изначальное FALSE а у ALL изначальное TRUE?

Ребят, я вам удивляюсь. У меня дочка в 5 классе понимала почему из утверждения
"В этой комнате все драконы красные" не следует - "в этой комнате есть хотя бы один красный дракон".

и так 5 класс, урок информатики
МарьяИвановна: Комната пустая. Истиино или нет утверждение "В этой комнате все драконы красные" ?
Дочка: Истинно, так как из "В этой комнате все драконы красные" не следует - "в этой комнате есть хотя бы один красный дракон".
Вовочка: Хз. Из "В этой комнате все драконы красные" следует что Все драконы в этой комнате в красные (в комнате нет зеленых драконов). В тоже время, Евгений и его дочка на вопрос "В этой комнате все драконы зеленые" отвечат утвердительно, но в комнате ВСЕ драконы красные. Парадокс. UNKNOWN.


dbms_photoshop скормил фразу "В этой комнате все драконы красные" dbms_sql2.expand_sql_text
результат трансформации в (+) оказался "В этой комнате нет не красных драконов", а ето утверждение для пустой комнаты TRUE

Бага трансформации из ANSI в natural

ps
интересно что вернет DB2?


.....
stax
...
Рейтинг: 0 / 0
почему так ?
    #39522595
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StaxВ тоже время, Евгений и его дочка на вопрос "В этой комнате все драконы зеленые" отвечат утвердительно, но в комнате ВСЕ драконы красные. Парадокс.
Никакого парадокса тут. Даже если в комнате есть дракон, то может оказаться, что кто-то из говорящих дальтоник. :)
...
Рейтинг: 0 / 0
почему так ?
    #39522597
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арсеньев,

Из сунувшихся в комнату с драконом, кмк, получается малорепрезентативная выборка.
...
Рейтинг: 0 / 0
почему так ?
    #39522610
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей АрсеньевStaxВ тоже время, Евгений и его дочка на вопрос "В этой комнате все драконы зеленые" отвечат утвердительно, но в комнате ВСЕ драконы красные. Парадокс.
Никакого парадокса тут. Даже если в комнате есть дракон, то может оказаться, что кто-то из говорящих дальтоник. :)
даже если Э́ллисон дальтонник, трансформация в натурал доллжна проходить "правильно", и имхо для пустой комнаты UNKNOWN

.....
stax
...
Рейтинг: 0 / 0
почему так ?
    #39522630
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax и имхо для пустой комнаты UNKNOWN
И ты прав... (c) Древняя притча
...
Рейтинг: 0 / 0
почему так ?
    #39522632
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
envИз сунувшихся в комнату с драконом, кмк, получается малорепрезентативная выборка.
Кмк, малорепрезентативная среди тех кто вышел. :)
...
Рейтинг: 0 / 0
почему так ?
    #39522655
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxdbms_photoshop скормил фразу "В этой комнате все драконы красные" dbms_sql2.expand_sql_text
результат трансформации в (+) оказался "В этой комнате нет не красных драконов", а ето утверждение для пустой комнаты TRUE

Бага трансформации из ANSI в natural Исключительно как ирония:
...
Рейтинг: 0 / 0
почему так ?
    #39522658
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshop,

Эта та самая комната с красными драконами?
...
Рейтинг: 0 / 0
почему так ?
    #39522672
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
envdbms_photoshop,

Эта та самая комната с красными драконами?
судя по бликам (тени) на полу, возле двери причаились как минимум два красных дракона

.....
stax
...
Рейтинг: 0 / 0
почему так ?
    #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
77 сообщений из 77, показаны все 4 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / почему так ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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