|
|
|
nulls в выражениях типа IN и NOT IN (...)
|
|||
|---|---|---|---|
|
#18+
Почему в таком случае есть результаты Код: plaintext 1. 2. 3. 4. а в таком нет Код: plaintext 1. 2. PS Скачала и погоняла пару тестов. Первое впечатление - изучение Оракл и подготовка к экзаменам два разных множества которые, пересекаются по очень небольшой области:-) Например из вариантов ... where inv_dt > to_date('23-jul-1997'); ... where inv_dt > '23-jul-1997'; ... явно неправильные надо выбрать правильный. Почему where inv_dt > '23-jul-1997' правилен а where inv_dt > to_date('23-jul-1997') нет, не понятно, толи потому что в нем лишних телодвижений не делается... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2003, 15:33:52 |
|
||
|
nulls в выражениях типа IN и NOT IN (...)
|
|||
|---|---|---|---|
|
#18+
>Первое впечатление - изучение Оракл и подготовка к экзаменам два разных >множества это точно, т.к. первое это реальная жизнь, а второе - правильное понимание "политики партии" :-)) что касается твоих примеров, то в первом случае все понятно, т.к. условие в where должно возвращать true или false для набора строк, который будет выбран. В первом случае условию "5 in (5, null)" соответствуют все строки таблицы, т.к. для всех строк таблицы истинно выражение "5=5". А во втором случае ни одной, т.к. это условие всегда ложно. насчет второго вопроса не совсем понятно, возможно имеется ввиду, что индекс будет использован если функция не применяется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2003, 15:42:32 |
|
||
|
nulls в выражениях типа IN и NOT IN (...)
|
|||
|---|---|---|---|
|
#18+
С первым вопросом всё ясно там оптимизатор x in ( y, null ) преобразовывает запрос к виду x = y оr ... и условие срабатывает, а с датой мне не совсем понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2003, 15:43:07 |
|
||
|
nulls в выражениях типа IN и NOT IN (...)
|
|||
|---|---|---|---|
|
#18+
по условию "5 not in (6, null)" хотелось бы добавить, что его ложность вытекает из того, что null это неопределенное (произвольное) значение, которое может содержать, а может и не содержать 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2003, 15:45:15 |
|
||
|
nulls в выражениях типа IN и NOT IN (...)
|
|||
|---|---|---|---|
|
#18+
Потому-что надо знать эту самую как её булеву арифметику Твой запрос Код: plaintext 1. трансформируется в Код: plaintext 1. В таком случае становится понятно что условие всегда будет ложно, так как 5!=NULL всегда будет FALSE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2003, 15:45:33 |
|
||
|
nulls в выражениях типа IN и NOT IN (...)
|
|||
|---|---|---|---|
|
#18+
>select * from dual where 5 !=6 and 5!=NULL; ну только OR, а не AND . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2003, 15:48:14 |
|
||
|
nulls в выражениях типа IN и NOT IN (...)
|
|||
|---|---|---|---|
|
#18+
to .dba: Ну здрасте, приехали. Условие 5 not in (6, null) означает что значения 5 нет в этом списке вообще, то есть 5 не равняется ни 6 и ни null, что соответсвует 5 !=6 and 5!=NULL. Код: plaintext 1. 2. 3. 4. 5. 6. А если как ты говоришь "ну только OR, а не AND." , то первое условие будет выполняться и этого будет достаточно и запрос вернёт значение: Код: plaintext 1. 2. 3. 4. 5. 6. 7. .dba откажись от своих слов, а? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2003, 15:56:13 |
|
||
|
nulls в выражениях типа IN и NOT IN (...)
|
|||
|---|---|---|---|
|
#18+
to Vladimir C датой прикол в том что оба варианта работают и синтаксически правильны ... where inv_dt > to_date('23-jul-1997'); ... where inv_dt > '23-jul-1997'; но в тесте почему то правильным считается where inv_dt > '23-jul-1997'. to all за совет преобразования в наглядную конструкцию спасибо усл1 and усл2 усл1 or усл2 намного нагляднее to .dba по условию "5 not in (6, null)" хотелось бы добавить, что его ложность вытекает из того, что null это неопределенное (произвольное) значение, которое может содержать, а может и не содержать 5. То есть можно пользоваться таким правилом - если результат проверки условия неопределен из за наличия null то результат всегда false. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2003, 15:57:11 |
|
||
|
nulls в выражениях типа IN и NOT IN (...)
|
|||
|---|---|---|---|
|
#18+
>.dba откажись от своих слов, а? :) уже отказался :-)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2003, 15:58:36 |
|
||
|
nulls в выражениях типа IN и NOT IN (...)
|
|||
|---|---|---|---|
|
#18+
>То есть можно пользоваться таким правилом - если результат проверки >условия неопределен из за наличия null то результат всегда false. Вообще-то должно быть не false, а unknown. Но Оракл приравнивает это к false: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2003, 16:05:41 |
|
||
|
nulls в выражениях типа IN и NOT IN (...)
|
|||
|---|---|---|---|
|
#18+
to .dba: принято :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2003, 16:06:19 |
|
||
|
nulls в выражениях типа IN и NOT IN (...)
|
|||
|---|---|---|---|
|
#18+
2 dba: >что касается твоих примеров, то в первом случае все понятно, т.к. условие >в where должно возвращать true или false для набора строк, который будет >выбран. В первом случае условию "5 in (5, null)" соответствуют все строки >таблицы, т.к. для всех строк таблицы истинно выражение "5=5". >А во втором случае ни одной, т.к. это условие всегда ложно. I know you perfectly understand NULL logic, but for people who do not your statement could be very misleading. условие 5 = null всегда NULL!!! (not FALSE). Otherwise if 5 = null is FALSE then by all math logic rules NOT ( 5 = null ) should be TRUE. Same way 5 <> null is always NULL (not FALSE). Another words: IF 5 = NULL THEN DBMS_OUTPUT.PUT_LINE('5 is equal to null'); ELSE DBMS_OUTPUT.PUT_LINE('5 is not equal to null'); END IF; / will not output anything since both 5 = NULL and 5 <> NULL never yield to TRUE. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2003, 16:20:29 |
|
||
|
nulls в выражениях типа IN и NOT IN (...)
|
|||
|---|---|---|---|
|
#18+
>I know you perfectly understand NULL logic, but for people who do not your >statement could be very misleading. условие 5 = null всегда NULL!!! (not >FALSE). Otherwise if 5 = null is FALSE then by all math logic rules NOT ( 5 = null ) >should be TRUE. Same way 5 <> null is always NULL (not FALSE) Так я вроде уже пояснил этот момент цитатой из Oracle SQL Reference. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2003, 16:29:09 |
|
||
|
nulls в выражениях типа IN и NOT IN (...)
|
|||
|---|---|---|---|
|
#18+
to SY Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2003, 16:35:32 |
|
||
|
nulls в выражениях типа IN и NOT IN (...)
|
|||
|---|---|---|---|
|
#18+
I do non consider "Вообще-то должно быть не false, а unknown. Но Оракл приравнивает это к false" and explanation. Oracle NEVER "приравнивает это к false", it is NULL - period. It means I can not tell if 5 is or is not equal to 5, therefore I can not evaluate the condition. And it is not just semantics. It is important to understand when you deal with IF THEN ELSE logic, as it is shown in my example. If Oracle would "приравнивает это к false", ELSE portion of IF would be excuted. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2003, 16:37:32 |
|
||
|
nulls в выражениях типа IN и NOT IN (...)
|
|||
|---|---|---|---|
|
#18+
2 SY Я согласен, что не приравнивает, но в принципе о рез-те такого выражения в контексте возврата строк можно думать как о выражении вернувшем false. Т.е. результат будет такой же как для условия "where 1=0". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2003, 16:42:23 |
|
||
|
nulls в выражениях типа IN и NOT IN (...)
|
|||
|---|---|---|---|
|
#18+
My sincere apologies to dba and whole community. I learned someting new today. For years I was under impression ELSE is executed only if confition yields to FALSE and yes it is stated in docs (as I just found out) ELSE is executed if confition yields to FALSE or NULL. My apologies again. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2003, 16:52:19 |
|
||
|
nulls в выражениях типа IN и NOT IN (...)
|
|||
|---|---|---|---|
|
#18+
to SY Here, the woman logic applies:-) THEN block is executed if the condition is YES. ELSE block is executed in all other cases, that is, if the condtion is NO MAYBE MAYBE NOT ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2003, 16:58:54 |
|
||
|
nulls в выражениях типа IN и NOT IN (...)
|
|||
|---|---|---|---|
|
#18+
>My apologies again. Don't mind. One of the main advantages of this forum, for me, is the possibility to look on my own statements aside. It helps for better understanding own knowledges and to correct my own misleading points. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2003, 17:26:17 |
|
||
|
nulls в выражениях типа IN и NOT IN (...)
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. Ошибочность этого кода, в том что этот код считает, что сравнение числа 5 с NULL значением с использованим знаков =, <>, != итд является правильным. Но как известно для сравнения с NULL может использоваться ТОЛЬКО!- "IS NULL", "IS NOT NULL". Это надо понять раз и навсегда!!! В данном случае всегда отвергается первая проверка и поэтому будет истинной вторая. Поверить же это очень просто, достаточно лишь поменять текст сообщений местами: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2003, 17:36:46 |
|
||
|
nulls в выражениях типа IN и NOT IN (...)
|
|||
|---|---|---|---|
|
#18+
А я все думаю и не могу понять, зачем такие люди как .dba killed Al Angel Oracle X-pert и др. в форум ходят. Сколько здесь сижу ни разу не заметила чтобы они что то новое узнали или что то спрашивали. Но что важно, так это то что такие люди в форуме есть. Еще очень много полезной и интересной информации можно найти в темах, поднимаемых softbuilder'ом, для тех кто идет по его стопам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2003, 17:41:00 |
|
||
|
nulls в выражениях типа IN и NOT IN (...)
|
|||
|---|---|---|---|
|
#18+
to Violina: По поводу меня - тут достаточно всё просто: я готовлюсь к сдаче экзаменов, поэтому, то что в 8i появилось новое в сравнении с 8.0.X и я еще не применял на практике по разным причинам - иногда вызывает вопросы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2003, 17:49:29 |
|
||
|
nulls в выражениях типа IN и NOT IN (...)
|
|||
|---|---|---|---|
|
#18+
2 Violina Зря Вы думаете, что ничего нового или интересного я для себя не обнаруживаю. Я с интересом читаю о написаниях или оптимизациях запросов. В этом я не силен, хоть и работал какое-то время в разработке и проектировании. А отвечаю по профессиональной привычке - работал в техподдержке и преподавателем. Коим и сейчас являюсь. Глупости молодости же должен кто-то исправлять... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2003, 18:21:18 |
|
||
|
|

start [/forum/topic.php?fid=52&fpage=2774&tid=1990375]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
53ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
73ms |
get tp. blocked users: |
2ms |
| others: | 238ms |
| total: | 415ms |

| 0 / 0 |
