Вход | Регистрация
 

Как обманчивы Null-ы

Как обманчивы Null-ы
Я
   mista2009
 
22.12.08 - 12:21
ВЫБРАТЬ
   ВЫБОР
       КОГДА NULL <> NULL
           ТОГДА ЛОЖЬ
       ИНАЧЕ ИСТИНА
   КОНЕЦ КАК Поле1,
   ВЫБОР
       КОГДА NULL = NULL
           ТОГДА ЛОЖЬ
       ИНАЧЕ ИСТИНА
   КОНЕЦ КАК Поле2,
   ВЫБОР
       КОГДА 1 <> NULL
           ТОГДА ЛОЖЬ
       ИНАЧЕ ИСТИНА
   КОНЕЦ КАК Поле3,
   ВЫБОР
       КОГДА 1 = NULL
           ТОГДА ЛОЖЬ
       ИНАЧЕ ИСТИНА
   КОНЕЦ КАК Поле4
   Defender aka LINN
 
1 - 22.12.08 - 12:23
(0) Я бы на твоем месте не торопился выпячивать свое незнание элементарных вещей.
   mista2009
 
2 - 22.12.08 - 12:24
(1) Уважаемый ткните носом в документацию. Номер страницы пожалуйста подскажите.
   Всеяд
 
3 - 22.12.08 - 12:26
(1) + 1

(2)
"Важно! Любая операция сравнения двух значений, в которой участвует хотя бы одно значение NULL, дает результат, аналогичный значению ЛОЖЬ.", Конфигуратор 1С:Предприятие 8.1
Логические выражения в языке запросов
   mista2009
 
4 - 22.12.08 - 12:28
(3) Закиньте запрос в консоль уважаемые, не поленитесь, много нового откроете :)
   Defender aka LINN
 
5 - 22.12.08 - 12:29
   Cheater
 
6 - 22.12.08 - 12:29
(4) а вникнуть в (3)?
   Широкий
 
7 - 22.12.08 - 12:29
мдя... NULL или ЕСТЬ NULL или НЕ ЕСТЬ NULL
   Defender aka LINN
 
8 - 22.12.08 - 12:30
(4) Ничего нового не открыл
   КонецЦикла
 
9 - 22.12.08 - 12:32
(4)

select case when null = null then
   0
   else
   case when null <> null then
   1
   else
   2
end
end

Возвращает 2
Куда дальше копать?
Как жить?
   Megas
 
10 - 22.12.08 - 12:32
Вообще на бред твой запрос похож... что ты этим пытаешся сделать?
Вообще попробуй так

ВЫБОР
КОГДА ЕстьNULL(ТвойПоле,0) <> 0
            ТОГДА ЛОЖЬ
        ИНАЧЕ ИСТИНА
КОНЕЦ КАК Поле1,
   Megas
 
11 - 22.12.08 - 12:33
Или пиши что сделать хош... тебе напишу как.
   DeoxyS
 
12 - 22.12.08 - 12:35
ну в (5) же написали выражение вида IF <что-то> = NULL THEN <действие1> ELSE <действие2> END IF всегда будет приводить к выполнению действия2
   mista2009
 
13 - 22.12.08 - 13:19
Продолжим тему обманчивых Null-ов  :)

А что уважаемы скажут по этому поводу

ВЫБРАТЬ
    ВЫБОР
        КОГДА НЕ (NULL = NULL)
            ТОГДА ИСТИНА
        ИНАЧЕ ЛОЖЬ
    КОНЕЦ КАК Поле2

(3) не работает!
   КонецЦикла
 
14 - 22.12.08 - 13:21
(13) Хватит тупить и пугать нас сложными конструкциями
   Defender aka LINN
 
15 - 22.12.08 - 13:22
(13) Ты дурной? В (3) русским по белому написано "ЛЮБАЯ"
   mista2009
 
16 - 22.12.08 - 13:22
null=null будет ложь?
не ложь будет истина

почему не то выдаёт?
   Господин ПЖ
 
17 - 22.12.08 - 13:22
>>А что уважаемы скажут по этому поводу 

>>КОГДА НЕ (NULL = NULL)

дурак штоле?
   vde69
 
18 - 22.12.08 - 13:23
(13) NULL  - это НЕ тип данных вообще!!!
в запросе есть единственый оператор который осуществляет проверку "Есть NULL" 

все другие попытки работы с "остутствием описания данных" неправильные
   Андрюха
 
19 - 22.12.08 - 13:24
Дайте, дайте мне тож пнуть! Эх, не успел... ((((
   mista2009
 
20 - 22.12.08 - 13:28
Наивные чукотские парни, ктонить 16 посмотрел?
   Defender aka LINN
 
21 - 22.12.08 - 13:29
(16), (20) Ссылку читали?
"Любая операция сравнения с NULL (даже операция «NULL = NULL»), даёт в результате значение «неизвестность» (UNKNOWN). Окончательный результат при этом зависит от полного логического выражения в соответствии с таблицей истинности логических операций. Если сравнение с NULL есть вся логическая операция целиком (а не её часть), то результат её аналогичен FALSE (выражение вида IF <что-то> = NULL THEN <действие1> ELSE <действие2> END IF всегда будет приводить к выполнению действия2)." - какие еще вопросы могут быть?
   Лефмихалыч
 
22 - 22.12.08 - 13:30
(20) сам-то проверял?
   Широкий
 
23 - 22.12.08 - 13:30
(20) Пипец.. считай что генирируется исключение- которое отображается как ЛОЖЬ
   Лефмихалыч
 
24 - 22.12.08 - 13:31
(21) бесполезно - там подписи Нуралиева нет, - (0) не поверит
   hhhh
 
25 - 22.12.08 - 13:32
(20) тебе же сказали операции "=" у типа NULL нет.

по твоей команде срабатывает Попытка ... Исключение, причем в исключении всегда стоит ложь, какое бы ты логическое выражение не наваял.

Пиши правильно NULL ЕСТЬ NULL
   ХочуВойти
 
26 - 22.12.08 - 13:34
нету тут улю 427...
   mista2009
 
27 - 22.12.08 - 13:40
(21) Любая операция сравнения с NULL (даже операция «NULL = NULL»), даёт в результате значение «неизвестность» 

У меня же конкретное значение выдаёт:  NULL = NULL - ложь
   HEKPOH
 
28 - 22.12.08 - 13:41
(0),(13) Мде, вот к чему приводит незнание основ. Это не наезд - это констатация факта
   HEKPOH
 
29 - 22.12.08 - 13:42
(27) в 1С не используют UNKNOWN. Читай букварь
   NcSteel
 
30 - 22.12.08 - 13:43
(27) Тебе уже много раз объяснили что к чему.
 
 
   NcSteel
 
31 - 22.12.08 - 13:43
(29) Еще один (
   Defender aka LINN
 
32 - 22.12.08 - 13:44
(27) Мда, медицина тут бесполезна...
Если ты видишь булево значение в результате запроса, это не значит, что в самом запросе это булево. Представление(Значение) в результате тебе даст строку, "1" + Представление(Значение) - ошибку. Элементарные вещи.
   hhhh
 
33 - 22.12.08 - 13:44
(27) в дальнейшем сверяйся с таблицей
NULL = NULL                  =ЛОЖЬ
НЕ (NULL=NULL)               =ЛОЖЬ
НЕ (НЕ (NULL = NULL))        =ЛОЖЬ
НЕ (НЕ (НЕ (NULL = NULL)))   =ЛОЖЬ

...
   HEKPOH
 
34 - 22.12.08 - 13:47
(31) с этого места подробнее, пожл
   ХочуВойти
 
35 - 22.12.08 - 13:47
(33) Гыыы...
   mista2009
 
36 - 22.12.08 - 14:05
(25) Мысль интересная, ты где такое вычитал. Не в ЖКК же?
   vde69
 
37 - 22.12.08 - 20:17
даю подписаное Нуралиевым
http://v8.1c.ru/predpriyatie/typical_problems_Req.htm

Почему в запросе не работает сравнение <Выражение> = NULL?
Если в запросе есть необходимость проанализировать значение некоторого выражения на равенство NULL, следует использовать не операции сравнения (=, <>), а специальный оператор проверки значения выражения на равенство NULL, имеющий следующий синтаксис:

<Выражение> ЕСТЬ [НЕ] NULL 

Например:

ВЫБРАТЬ
Номенклатура.Наименование,
Номенклатура.НомерГТД
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
((Номенклатура.НомерГТД) ЕСТЬ НЕ NULL )

Если же в этом запросе вместо конструкции ЕСТЬ НЕ использовать операцию сравнения (<>), то это приведет к тому, что записи отбираться не будут.

Следует отметить, что, несмотря на то, что при сравнении значений разных типов определен приоритет типов (NULL, булево, число, дата, строка, ссылка), подобное сравнение имеет смысл для всех типов, кроме NULL. Наличие типа NULL в этой иерархии необходимо лишь для того, чтобы обеспечить упорядочивание записей результата запроса в соответствии с порядком, заданным в предложении УПОРЯДОЧИТЬ ПО.
   nbIx
 
38 - 22.12.08 - 20:37
(37) так точно, очень удивлен, что уже настрочили 36 постов...
   ShoGUN
 
39 - 22.12.08 - 21:00
Бу-га-га :)))
(36) Отвлекись от 1c и попробуй в скуле то же самое провернуть.
И запиши (33), а то забудешь...
   mista2009
 
40 - 22.12.08 - 21:16
Наивные чукотские парни в (37) НЕТ объяснения (16)

(38)(39) Мы готовы внимательно заслушать вашу теорию по поводу (16)
   0xFFFFFF
 
41 - 22.12.08 - 21:39
Если
Непонятьчё сравнить с Непонятьчё получим тоже Непонятьчё
Если делать отрицание этого
Не (Непонятьче сравнить с Непонятьчё) то будет тоже непонятьче.
Че непонять?
   0xFFFFFF
 
42 - 22.12.08 - 21:41
NULL = NULL                  =ЛОЖЬ
НЕ (NULL=NULL)               =ЛОЖЬ
НЕ (НЕ (NULL = NULL))        =ЛОЖЬ
НЕ (НЕ (НЕ (NULL = NULL)))   =ЛОЖЬ


Ничего удивительного.
   mista2009
 
43 - 22.12.08 - 21:51
(41) Если Непонятьчё это Null, то по твоей теории получается следующее
Null=Null = Null
Not (Null=Null)=Null

:)
   Defender aka LINN
 
44 - 22.12.08 - 21:56
(41) Я ж говорю - медицина бесполезна.
(43) (NULL=NULL) - ни разу не равно Ложь. Оно равно Unknown. Not unknown, как ни странно равно ему же.
Истина ИЛИ (NULL=NULL) даст Истина. Так что звиздуй-ка ты на Чукотку, аборигенов просвещать.
   ShoGUN
 
45 - 22.12.08 - 22:17
Развод?
   0xFFFFFF
 
46 - 22.12.08 - 22:26
(43)
Мы можем утверждать, что два неопределенных значения равны между собой?
Нет, значит ЛОЖЬ.
Мы можем утверждать, что два неопределенных значения не равны между собой?
Нет, значит ЛОЖЬ.
   Immortal
 
47 - 22.12.08 - 22:57
(33) Аааааа. падстолом=)
   mista2009
 
49 - 22.12.08 - 23:27
Пока вырисовывается две теории объяснения (16):
- Это теория Unknown (44)
- Теория Исключения (23)(25)

Ждём ещё теорий.
   Fragster
 
51 - 22.12.08 - 23:29
(50)+ причем это - как бойль-мариотт...
   MRAK
 
52 - 22.12.08 - 23:38
(0) на PL/SQL попробуй подобное написать... больше глупых вопросов не возникнет..
   vde69
 
Модератор
53 - 23.12.08 - 00:47
(49) я тебе давал ссылку на первоисточник, не хочеш верить не надо! а сейчас ты как фиксин ведешь себя. (тот-же стиль)

если не веришь 1с, то даю другое обьяснение:

SQL хранит данные страницами, на странице может быть 1 или несколько строк таблицы, данные записаны в странице в последовательности "тип"-"данные" причем длина одного поля может быть переменная. Так вот NULL - это когда на странице для поля(шапки) вообще нету определения "тип" и нету "данных", тоесть когда поле должно быть а его физически нету.

с точки зрения математики это можно представить как функцию стремящуюся к 0 и не имеющего в 0 значения, (бесконечно малое число), так вот сравни теперь их:
с одной стороны они ни когда не равны (по сколько бесконечно изменяються) а с другой стремяться к 0


А вообще не иди по стопам фиксина, нам его одного слишком хватает. :)
   Стрелок
 
54 - 23.12.08 - 02:57
даже я понял с первого раза. а я в 8-ке полный ноль....


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.