Orient
|
|
|
|
|
Рег.: 18.09.2004
|
Сообщений: 924
|
Из: Singapore
|
Рейтинг: 133
|
|
Re: [SQL] зачем NULL трактуется так извращенно?
[re: Zoobastik]
20.03.2008 12:34
|
|
|
Я к тому, что даже эти "базовые", как ты говоришь, вещи сходу не очевидны даже для базовиков с многолетним стажем.
|
|
Orient
|
|
|
|
|
Рег.: 18.09.2004
|
Сообщений: 924
|
Из: Singapore
|
Рейтинг: 133
|
|
Re: [SQL] зачем NULL трактуется так извращенно?
[re: nelapsi]
20.03.2008 12:36
|
|
|
Если в базе есть клиенты с именем NULL, они и должны получиться. Этого будет ожидать любой нормальный человек (не мыслящий в троичной логике).
|
|
gadfather
|
Carpal Tunnel
|
|
|
|
Рег.: 05.11.2003
|
Сообщений: 47302
|
Из: пл. Гагарина
|
Рейтинг: 16961
|
|
Re: [SQL] зачем NULL трактуется так извращенно?
[re: Orient]
20.03.2008 12:37
|
|
|
> Я к тому, что даже эти "базовые", как ты говоришь, вещи сходу не очевидны даже для базовиков с многолетним стажем.
Ты в форуме больше трех лет. Ты все знаешь про HTTP?
|
You can't always get what you want |
|
Orient
|
|
|
|
|
Рег.: 18.09.2004
|
Сообщений: 924
|
Из: Singapore
|
Рейтинг: 133
|
|
Re: [SQL] зачем NULL трактуется так извращенно?
[re: nelapsi]
20.03.2008 12:39
|
|
|
Сможешь развернуть условие, которое я выше дал
code: select * from table where column1 = :value1 and column2 = :value2 or column3 = :value3
чтобы оно адекватно NULL-ы обработало? Представь, что кто-то уже развернул. Ты сможешь понять, что он имел в виду at a glance?
|
|
DarkGray
|
Carpal Tunnel
|
|
|
|
Рег.: 30.09.2002
|
Сообщений: 31411
|
|
Рейтинг: 8952
|
|
Re: [SQL] зачем NULL трактуется так извращенно?
[re: Orient]
20.03.2008 12:41
|
|
|
Quote:
NULL or TRUE = TRUE NULL and TRUE = NULL
... select (1 = 1) from dual
и первое и второе - это чисто oracle, а не sql
в sql в первом случае должно быть: null or true - null
по второму должно быть select 1=1 (без всяких dual-ов) и должно возвращаться true
|
|
Orient
|
|
|
|
|
Рег.: 18.09.2004
|
Сообщений: 924
|
Из: Singapore
|
Рейтинг: 133
|
|
Re: [SQL] зачем NULL трактуется так извращенно?
[re: gadfather]
20.03.2008 12:42
|
|
|
Начинаешь прям как Гусман  HTML меня мало интересует. Общие вещи знаю. А что, у тебя есть вопросы?
|
|
Orient
|
|
|
|
|
Рег.: 18.09.2004
|
Сообщений: 924
|
Из: Singapore
|
Рейтинг: 133
|
|
Re: [SQL] зачем NULL трактуется так извращенно?
[re: DarkGray]
20.03.2008 12:44
|
|
|
|
gadfather
|
Carpal Tunnel
|
|
|
|
Рег.: 05.11.2003
|
Сообщений: 47302
|
Из: пл. Гагарина
|
Рейтинг: 16961
|
|
Re: [SQL] зачем NULL трактуется так извращенно?
[re: Orient]
20.03.2008 12:45
|
|
|
Ну вот ты за 3 года не научился различать HTML и HTTP. Чего ты хочешь от тех "базовиков"?
|
You can't always get what you want |
|
botWi
|
|
|
|
|
Рег.: 22.11.2003
|
Сообщений: 10160
|
Из: Moscow
|
Рейтинг: 1764
|
|
Re: [SQL] зачем NULL трактуется так извращенно?
[re: nelapsi]
20.03.2008 12:52
|
|
|
Quote:
имхо ты сам себе противоречишь 
вроде не противоречю в первой яасти я говорю что троичная логика нужна, что спец. обработка для null нужна во второй части я говорю что возможно есть один случай когда возможно она не нужна: это равенство но потом я сообразил про джойны и этот случай тоже отпал, ибо джойнить по наллам это бред
если бы токо можно было отличать джойн от чиста сравнения как-то так:
code:
where column ~= :value
ну тойсть есть спец. операция ~= которая может наллы сравнивать
но это же получается ненужный сахар, который еще и к путанице может привести
придумал еще вариант:
code:
where NVL(column, SPECIAL_VALUE_THAT_NEVER_CAN_OCCURS_IN_THIS_COLUMN)
= NVL(:value, SPECIAL_VALUE_THAT_NEVER_CAN_OCCURS_IN_THIS_COLUMN)
Редактировал DarkGray (20.03.2008 13:00)
|
Хватит дрочить на рейтинги |
|
botWi
|
|
|
|
|
Рег.: 22.11.2003
|
Сообщений: 10160
|
Из: Moscow
|
Рейтинг: 1764
|
|
Re: [SQL] зачем NULL трактуется так извращенно?
[re: DarkGray]
20.03.2008 12:53
|
|
|
В ответ на:
и первое и второе - это чисто oracle, а не sql
в sql в первом случае должно быть: null or true - null
от тебя не ожидал  даже по обычной домашней логике: правда или всечтоугоднохотьчтотохотьничто = правда
|
Хватит дрочить на рейтинги |
|
Orient
|
|
|
|
|
Рег.: 18.09.2004
|
Сообщений: 924
|
Из: Singapore
|
Рейтинг: 133
|
|
Re: [SQL] зачем NULL трактуется так извращенно?
[re: gadfather]
20.03.2008 12:54
|
|
|
Ошибся. Говорю же, с вебом дело мало имел, да и речь не о нем. Я знаю их настолько, насколько мне это сейчас нужно. Понадобится лучше - будет лучше.
|
|
DarkGray
|
Carpal Tunnel
|
|
|
|
Рег.: 30.09.2002
|
Сообщений: 31411
|
|
Рейтинг: 8952
|
|
Re: [SQL] зачем NULL трактуется так извращенно?
[re: Orient]
20.03.2008 12:59
|
|
|
херотень оказывается в том, что есть null, а есть unknown
от туда же
Quote:
Boolean datatype inconsistency The ISO SQL:1999 standard introduced the Boolean datatype to SQL.[20] The Boolean datatype, as defined by the standard, can hold the truth values TRUE, FALSE, and UNKNOWN. Null is defined in this one instance as equivalent to the truth value UNKNOWN.
This "null equals UNKNOWN truth value" proposition introduces an inconsistency into SQL 3VL. One major problem is that it contradicts a basic property of nulls, the property of propagation. Nulls, by definition, propagate through all SQL expressions. The Boolean truth values do not have this property. Consider the following scenarios in SQL:1999, in which two Boolean truth values are combined into a compound predicate. According to the rules of SQL 3VL, and as shown in the 3VL truth table shown earlier in this article, the following statements hold:
( TRUE OR UNKNOWN ) → TRUE ( FALSE AND UNKNOWN ) → FALSE However, because nulls propagate, treating null as UNKNOWN results in the following logical inconsistencies in SQL 3VL:
( TRUE OR NULL ) → NULL ( = UNKNOWN ) ( FALSE AND NULL ) → NULL ( = UNKNOWN ) The SQL:1999 standard does not define how to deal with this inconsistency, and results could vary between implementations. Because of these inconsistencies and lack of support from vendors the SQL Boolean datatype did not gain widespread acceptance. Most SQL DBMS platforms now offer their own platform-specific recommendations for storing Boolean-type data.
|
|
nelapsi
|
the wumbologist
|
|
|
|
Рег.: 10.11.2003
|
Сообщений: 10758
|
Из: Orbis Tertius
|
Рейтинг: 10651
|
|
Re: [SQL] зачем NULL трактуется так извращенно?
[re: Orient]
20.03.2008 13:02
|
|
|
В ответ на:
Если в базе есть клиенты с именем NULL, они и должны получиться.
таких нет конечно же - просто кто-то откуда-то прислал тебе пустую строчку вместо имени
|
Your touch will set me free |
|
Orient
|
|
|
|
|
Рег.: 18.09.2004
|
Сообщений: 924
|
Из: Singapore
|
Рейтинг: 133
|
|
Re: [SQL] зачем NULL трактуется так извращенно?
[re: nelapsi]
20.03.2008 13:09
|
|
|
Тогда ты никого и не получишь. Что тебе не нравится?
|
|
Shurik
|
|
|
|
|
Рег.: 27.09.2003
|
Сообщений: 13646
|
|
Рейтинг: 787
|
|
Re: [SQL] зачем NULL трактуется так извращенно?
[re: Orient]
20.03.2008 13:35
|
|
|
Quote:
Люди, работающие по несколько лет исключительно с базами данных, офигевают, когда узнают, что
code: NULL or TRUE = TRUE NULL and TRUE = NULL
весь тред не читал, но про нетривиальность NULL-а и троичную логику Кузнецов на ВМК в базовом курсе лекций по базам данных рассказывал
|
not fluffing up the experience with features that will ultimately cause you a headache |
|
gadfather
|
Carpal Tunnel
|
|
|
|
Рег.: 05.11.2003
|
Сообщений: 47302
|
Из: пл. Гагарина
|
Рейтинг: 16961
|
|
Re: [SQL] зачем NULL трактуется так извращенно?
[re: Orient]
20.03.2008 13:39
|
|
|
Quote:
Я знаю их настолько, насколько мне это сейчас нужно. Понадобится лучше - будет лучше.
Теперь понятно, почему твои базовики мало знают про NULL?
|
You can't always get what you want |
|
nelapsi
|
the wumbologist
|
|
|
|
Рег.: 10.11.2003
|
Сообщений: 10758
|
Из: Orbis Tertius
|
Рейтинг: 10651
|
|
Re: [SQL] зачем NULL трактуется так извращенно?
[re: Orient]
20.03.2008 14:36
|
|
|
В ответ на:
Тогда ты никого и не получишь
ты недопонял  выбираешь ты не из таблицы с клиентами, а из таблицы где есть на них ссылка, которая может быть NULL
|
Your touch will set me free |
|
mkal
|
RIP
|
|
|
|
Рег.: 29.12.2004
|
Сообщений: 3036
|
|
Рейтинг: 1658
|
|
Re: [SQL] зачем NULL трактуется так извращенно?
[re: Orient]
20.03.2008 15:27
|
|
|
NULL сделали для того, чтобы можно было указывать отсутсвующий внешний индекс и корректно его обрабатывать при JOINах. И пользоваться им надо только в тех колонках таблицы, которые хранят ссылки на внешний индекс. Если ты хранишь NULL в качестве отсутсвующего имени, а потом удивляешься, что все не интуитивно, то сам себе злобный буратин. Ибо так делать не надо. Если имени нет, то храни там пустую строку. Или FALSE или UNKNOWN, смотря что БД позволяет использовать.
|
|
botWi
|
|
|
|
|
Рег.: 22.11.2003
|
Сообщений: 10160
|
Из: Moscow
|
Рейтинг: 1764
|
|
Re: [SQL] зачем NULL трактуется так извращенно?
[re: mkal]
20.03.2008 15:43
|
|
|
В ответ на:
Если имени нет, то храни там пустую строку. Или FALSE или UNKNOWN, смотря что БД позволяет использовать.
блин прочти тред сначала я ж писал: в оракле пустая строка и NULL это одно и то же то есть если имени нет, то у тебя токо один вариант: хранить там NULL
|
Хватит дрочить на рейтинги |
|
mkal
|
RIP
|
|
|
|
Рег.: 29.12.2004
|
Сообщений: 3036
|
|
Рейтинг: 1658
|
|
Re: [SQL] зачем NULL трактуется так извращенно?
[re: botWi]
20.03.2008 15:59
|
|
|
Ну это как бы проблема оракла, а не SQL. И вопрос надо ставить не "почему NULL в SQL так нелогично себя ведет?", а "почему пустая строка так нелогично интерпретируется ораклом?".
|
|