Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
M&#36;
Guest
softwarer
P. S. Программисты делятся на три типа - на тех, кто понимает троичную логику и на тех, кто ее не понимает
Я не программист! Просто спорить люблю. Но я прекрасно вижу, что тот, кто ожидает каких-то результатов от использования таких кривостей либо крут, как варёные яйца и использует "специфические реализации", либо двоешник.
Мимопроходящий

помимо этого, есть ещё и неопределенное состояние - адепты M$
И мы гордимся этим! А всем, кто поощряет использование конструкций if 1 <> NULL then ... моё большое "фи"!
6 окт 08, 14:38    [6269584]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 32898

Hello, M&#36;!
You wrote on Mon, 06 Oct 08 11:38:17 GMT:

M&#36
M> Я не программист! Просто спорить люблю.
ааааа....
в сад, срочно!

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.4

6 окт 08, 14:40    [6269600]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
M&#36;
Guest
Мимопроходящий

в сад, срочно!
Ухожу :-( Злые вы. И чего накинулись-то? Интеллектом задавить решили? Но я вернусь... Дух M$ не сломить!
6 окт 08, 15:02    [6269722]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
Микросекунда
Member

Откуда: Из предыдущего мгновения
Сообщений: 1905
M&#36; пишет:

M> Дух M$ не сломить!

С такого перепугу можно и ... кхм... дух сломать. Или шуй. У кого что.

Posted via ActualForum NNTP Server 1.4

6 окт 08, 15:11    [6269784]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
VoDA
Member

Откуда: сеРверная пальмира :)
Сообщений: 4898
M$
softwarer
Ggg_old
Вообще странный запрос, т.к. любое логическая опреация с null должна давать null, следовательно использование такой операции напрямую в операторах типа case не очень верно, т.к. они оперируют булевыми типами.

Такое впечатление, что в Вашей реальности boolean значение не может быть null

Boolean НЕ может бить ничем, кроме true и false. И с каких пор в Вашей реальности появился тип boolean?
Бред В РМ, которую и реализуют РСУБД троичная система счисления

Потому boolean может быть true, false ИЛИ не определено аки null.
6 окт 08, 16:40    [6270415]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67525
Блог
VoDA
Бред В РМ, которую и реализуют РСУБД троичная система счисления

Текст до смайлика следовало бы писать с отдельной строки. Как-никак заголовок.
6 окт 08, 17:21    [6270666]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
Ozzy The terrible
Guest
M$
всем, кто поощряет использование конструкций if 1 <> NULL then ... моё большое "фи"!

2M$: Если это камень в мой огород, то Вы ошиблись адресом. Мне пришлось сопоставлять строку с помощью оператора LIKE с шаблоном, который заранее неизвестен. Он может оказаться корректным (типа '%,005%'), а может оказаться NULL'ом, т.к. сам является результатом некоторого сопоставления (других) таблиц. Вообще-то я накануне отвечал на эту тему

M$
Топикстартер написал кривой запрос... (поскипано) И хоть убейте, такой ужас писать меня не заставите
Тема топика совсем не про то, как надо и не надо писать запросы. Вас никто и не просил тут показывать своё мастерство.
6 окт 08, 21:00    [6271394]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
M&#36;
Guest
softwarer
M$
softwarer
Такое впечатление, что в Вашей реальности boolean значение не может быть null

Boolean НЕ может бить ничем, кроме true и false.

Плюньте в лицо тому, кто Вам сказал такую глупость.
Georg Boole умер в 1864 году. Плюнуть ему в лицо не смогу не смотря на всё ваше желание.
Ozzy The terrible
M$
Топикстартер написал кривой запрос... (поскипано) И хоть убейте, такой ужас писать меня не заставите
Тема топика совсем не про то, как надо и не надо писать запросы. Вас никто и не просил тут показывать своё мастерство.
Это была попытка самозащиты, перевести стрелки, без обид. Может быть, это дело вкуса, я старался донести мысль, что все условия лучше привести к булевскому виду, тем более, что такие возможности есть, и есть они, наверное, вовсе не потому, что "программисты делятся на три типа - на тех, кто понимает троичную логику и на тех, кто ее не понимает" (с).
7 окт 08, 07:07    [6271893]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
VoDA
Member

Откуда: сеРверная пальмира :)
Сообщений: 4898
softwarer

Текст до смайлика следовало бы писать с отдельной строки. Как-никак заголовок.
Спасибо, теперь исправленный вариант.


В Реляционной алгебре, которую и реализуют Реляционные СУБД троичная система исчисления
7 окт 08, 12:26    [6273237]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
Локшин Марк
Member

Откуда: Воронеж
Сообщений: 3155
VoDA
[quot softwarer]
В Реляционной алгебре, которую и реализуют Реляционные СУБД троичная система исчисления

Троичная система исчисления (это в которой циферки 0,1,2) и даже двоичная (эта в которой циферки 0,1) это совсем не тоже самое, что многозначная логика.
7 окт 08, 13:29    [6273710]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67525
Блог
Локшин Марк
Троичная система исчисления (это в которой циферки 0,1,2)

Не обязательно, кстати. По мне красивей та, в которой цифирки -1, 0 и 1.
7 окт 08, 14:27    [6274151]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
Локшин Марк
Member

Откуда: Воронеж
Сообщений: 3155
softwarer
Локшин Марк
Троичная система исчисления (это в которой циферки 0,1,2)

Не обязательно, кстати. По мне красивей та, в которой цифирки -1, 0 и 1.

Ну для устного счета мне привычнее несимметричная...
7 окт 08, 14:54    [6274353]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
VoDA
Member

Откуда: сеРверная пальмира :)
Сообщений: 4898
Локшин Марк
Троичная система исчисления (это в которой циферки 0,1,2) и даже двоичная (эта в которой циферки 0,1) это совсем не тоже самое, что многозначная логика.
Но многозначная логика также и "0,1, 2, 3, 4" И "0, -1, -2, 1, 2, 3" (цифры от балды)

А как правильнее тогда назвать логику: 0, 1, unknown ???
8 окт 08, 10:54    [6277677]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67525
Блог
VoDA
А как правильнее тогда назвать логику: 0, 1, unknown ???

Вы неправильно ставите цифирки. Логика "0, 1, unknown" - это на самом деле логика "0, unknown, 1", и на самом деле это логика "0, 1, 2".
8 окт 08, 12:33    [6278545]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
Ozzy The Terrible
Guest
softwarer
Логика "0, 1, unknown" - это на самом деле логика "0, unknown, 1", и на самом деле это логика "0, 1, 2"
-- но ведь для UNKNOWN действуют другие правила: true AND unknown = unknown и т.п. Имхо, не зря стали обозначать эту самую "третью циферку" НЕ в виде арабской цифры, а в виде буквенного литерала.
8 окт 08, 14:26    [6279544]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67525
Блог
Ozzy The Terrible
-- но ведь для UNKNOWN действуют другие правила: true AND unknown = unknown

Плюньте в лицо тому, кто Вам сказал такую глупость.

false = 0
unknown = 1
true = 2

Операцию AND (a, b) определяем как min (значение_а, значение_b)
Операцию OR (a, b) определяем как max (значение_а, значение_b)
Операцию NOT (a) определяем как (2 - значение_а)

С любопытством жду примеров исключения из правил.
8 окт 08, 14:59    [6279785]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
softwarer
Ozzy The Terrible
-- но ведь для UNKNOWN действуют другие правила: true AND unknown = unknown

Плюньте в лицо тому, кто Вам сказал такую глупость.

false = 0
unknown = 1
true = 2

Операцию AND (a, b) определяем как min (значение_а, значение_b)
Операцию OR (a, b) определяем как max (значение_а, значение_b)
Операцию NOT (a) определяем как (2 - значение_а)

С любопытством жду примеров исключения из правил.


зачот
8 окт 08, 15:23    [6279999]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
Ozzy The Terrible
Guest
Сорри, я неправильно выразил первую мысль: прочитал фразу "Троичная система исчисления (это в которой циферки 0,1,2)" [цитирую Локшина Марка] и выделил для себя именно слова "система счисления", т.е. "алфавит" для выражения любых чисел. Вот и хотел сказать, что набор {0, unknown, 1} не предназначен для выражения через него какого-либо числа вообще, т.к. применяется совершенно для других целей, а именно для вычисления логич. выражений.

автор
С любопытством жду примеров исключения из правил.
от меня не ждите ; я знаю про эту аналогию (читал не то у Селко, не то в книге "Задачи по SQL" С.И. Моисеенко, не помню точно).
8 окт 08, 19:09    [6281690]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
Bogdanov Andrey
Member

Откуда: Да уже и сам не знаю...
Сообщений: 2203
softwarer
С любопытством жду примеров исключения из правил.
Ну исключений не будет, а вот критика такого подхода...
У Ozzy The Terrible операции описываются очень простой таблицей (он правда не привел ее полностью, но думаю, что каждый может нарисовать), а у вас подход чрезвычайно сложный. Для того, чтобы описать такие элементарные операции, как OR, AND, NOT потребовалось
а) ввести отношение порядка
б) определить операции min и max
в) ввести операцию вычитания
Очень уж нерационально, хотя изоморфный алгебраический объект мы несомненно получим.
У вашего подхода преимущество только в том, что он допускает простое обобщение на случаи совсем уж многозначных логик вплоть до "нечеткой" логики, где множество допустимых значений континуально.
9 окт 08, 09:35    [6282686]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
MGR
Member

Откуда:
Сообщений: 536
softwarer
P. S. Программисты делятся на три типа - на тех, кто понимает троичную логику и на тех, кто ее не понимает


Не так
1. Программист понимает троичную логику
2. Программист не понимает троичную логику
3. Не определено

:)
9 окт 08, 16:02    [6285771]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67525
Блог
MGR
Не так
1. Программист понимает троичную логику
2. Программист не понимает троичную логику
3. Не определено

:)

Это формулировка для тех, кому все надо разжевывать :)
9 окт 08, 17:24    [6286507]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
LeXa NalBat
Member

Откуда: Москва
Сообщений: 2892
FALSE AND NULL = FALSE

Почему так приняли, как это можно объяснить?

Что бы ни стояло на месте NULL, что с FALSE-ом не пересекай, не получишь больше чем FALSE?

PS: А потом я задам еще один глупый вопрос.
9 окт 08, 17:52    [6286787]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
VoDA
Member

Откуда: сеРверная пальмира :)
Сообщений: 4898
softwarer
Ozzy The Terrible
-- но ведь для UNKNOWN действуют другие правила: true AND unknown = unknown

Плюньте в лицо тому, кто Вам сказал такую глупость.

false = 0
unknown = 1
true = 2

Операцию AND (a, b) определяем как min (значение_а, значение_b)
Операцию OR (a, b) определяем как max (значение_а, значение_b)
Операцию NOT (a) определяем как (2 - значение_а)

С любопытством жду примеров исключения из правил.
Баловство все это ;)

исходя из ваших правил: false AND unknown должно давать ответ false, тогда !(false AND unknown) должно выдать true. Ваш предпочитаемый сервер Oracle в хранимке выдает другой результат:

Наполнение БД для получения значения NULL:
CREATE TABLE "NULL_TABLE" 
   (	"NULL_COLUMN" NUMBER(*,0)
   );
   
INSERT INTO "NULL_TABLE" VALUES(null);

select * from NULL_TABLE;

NULL_COLUMN            
---------------------- 
                       

1 rows selected

Сама процедура:
CREATE OR REPLACE
PROCEDURE TEST_NULL AS
  cnumber number;
  abit boolean;
  cursor c1 is
  select null_column
  from null_table;
BEGIN
  open c1;
  fetch c1 into cnumber;
  
  -- Тут по вашей логике в abit должно быть false.
  -- сравнивать можно с любым числом поскольку в cnumber находится null.
  abit := (cnumber = 1);
  
  if abit then
    dbms_output.put_line('true');
  else
    dbms_output.put_line('false');
  end if;
  
  --если было false, то должно стать true.
  abit := NOT abit;
  
  if abit then
    dbms_output.put_line('true');
  else
    dbms_output.put_line('false');
  end if;
  
  close c1;
END TEST_NULL;

Результат:
Connecting to the database localhost ***.
false
false
Process exited.
Disconnecting from the database localhost ***.
Получаем что и abit и NOT abit дает false!

PS Меня на дисциплинах по базам данных учили, что любой сравнение с unknown дает unknown. для логических выражений типа case, where и подобных unknown трактуется как NOT TRUE.
9 окт 08, 18:02    [6286852]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
VoDA
Member

Откуда: сеРверная пальмира :)
Сообщений: 4898
Н-дас... хотел разгромить оппонента, но не получилось... softwarer похоже прав, по крайней мере для Oracle.

Некоторые доработки хранимки дают интересный результат.

BEGIN
  open c1;
  fetch c1 into cnumber;
  
  abit := (cnumber = 1) AND (1 = 0);
  
  if abit then
    dbms_output.put_line('true');
  else 
    --если было false, то должно стать true.
    --abit := NOT abit;
    if NOT abit then
      dbms_output.put_line('false');
    else
      dbms_output.put_line('unknown');
    end if;
  end if;
  
  close c1;
END TEST_NULL;

Заменив расчет abit := (cnumber = 1); на abit := (cnumber = 1) AND (1 = 0);
получаем false вместо unknown


я в печали. нужно попытаться проверить для других СУБД.
9 окт 08, 18:08    [6286876]     Ответить | Цитировать Сообщить модератору
 Re: Странность при сопоставлении: <string> LIKE null в разных СУБД.  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67525
Блог
VoDA
PS Меня на дисциплинах по базам данных учили, что любой сравнение с unknown дает unknown.

AND и OR - это не сравнения.
9 окт 08, 18:51    [6287062]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Сравнение СУБД Ответить