|
|
|
Вопрос про GROUP BY
|
|||
|---|---|---|---|
|
#18+
Почему выполняется группирование по группе NULL, ведь NULL не равен NULL, а при группировании вроде они становятся равны. Пример Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Результат равен f1 sum NULL 15 1 6 2 24 Хотя ожидалось, что будет f1 sum 1 6 2 24 В документации объяснений не нашел (либо плохо искал). Объясните, почему так. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 09:52:18 |
|
||
|
Вопрос про GROUP BY
|
|||
|---|---|---|---|
|
#18+
big-trot, Посмотри в http://www.postgresql.org/message-id/199907071823.OAA05656@candle.pha.pa.us]этой дискуссии: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2015, 17:38:38 |
|
||
|
Вопрос про GROUP BY
|
|||
|---|---|---|---|
|
#18+
big-trotПочему выполняется группирование по группе NULL, ведь NULL не равен NULL, а при группировании вроде они становятся равны. Пример Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Результат равен f1 sum NULL 15 1 6 2 24 Хотя ожидалось, что будет f1 sum 1 6 2 24 В документации объяснений не нашел (либо плохо искал). Объясните, почему так. Спасибо. нул не равен нул, но для группировки делается исключение, причем везде и всегда и во всех субд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2015, 09:45:36 |
|
||
|
Вопрос про GROUP BY
|
|||
|---|---|---|---|
|
#18+
еще так же например в уникальном индексе второй нул не вставишь, хотя они и не равны, но эквивалентны ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2015, 09:46:26 |
|
||
|
Вопрос про GROUP BY
|
|||
|---|---|---|---|
|
#18+
Ivan Durakеще так же например в уникальном индексе второй нул не вставишь, хотя они и не равны, но эквивалентны вы не путаете пж с мс-скл ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2015, 10:05:09 |
|
||
|
Вопрос про GROUP BY
|
|||
|---|---|---|---|
|
#18+
Спасибо. Ivan Durak еще так же например в уникальном индексе второй нул не вставишь, хотя они и не равны, но эквивалентны Для ПЖ это ограничение не действует, можно вполне вставлять не одно значение NULL в поле, на которое наложено ограничение уникальности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2015, 15:54:47 |
|
||
|
Вопрос про GROUP BY
|
|||
|---|---|---|---|
|
#18+
big-trotСпасибо. Ivan Durak еще так же например в уникальном индексе второй нул не вставишь, хотя они и не равны, но эквивалентны Для ПЖ это ограничение не действует, можно вполне вставлять не одно значение NULL в поле, на которое наложено ограничение уникальности. да индекс с мсскл перепутал, думал тут также. Ну дистинкт-то точно один null оставляет !! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2015, 17:52:10 |
|
||
|
Вопрос про GROUP BY
|
|||
|---|---|---|---|
|
#18+
big-trotПочему выполняется группирование по группе NULL, ведь NULL не равен NULL, а при группировании вроде они становятся равны. Пример Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Результат равен f1 sum NULL 15 1 6 2 24 Хотя ожидалось, что будет f1 sum 1 6 2 24 В документации объяснений не нашел (либо плохо искал). Объясните, почему так. Спасибо. а "почему так" вопрос клевый. Почему в пг и прочих '' (пустая строка) не эквивалентна нулу, а в оракле эквивалентна? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2015, 17:55:10 |
|
||
|
Вопрос про GROUP BY
|
|||
|---|---|---|---|
|
#18+
Ivan DurakПочему в пг и прочих '' (пустая строка) не эквивалентна нулу, а в оракле эквивалентна? В oracle еще в 90-х годах планировали сделать, чтобы пустая строка и null были не одно и тоже. По крайней мере в статьях о нововведениях для будущих версий про это писали и рекомендовали готовиться. Но так и не сделали. Я подозреваю, что из-за того, что уже очень много кода пришлось бы переписывать в приложениях. Думаю, это было бы покруче проблемы 2000 года, вот и оставили как есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2015, 18:24:46 |
|
||
|
Вопрос про GROUP BY
|
|||
|---|---|---|---|
|
#18+
Ivan DurakПочему в пг и прочих '' (пустая строка) не эквивалентна нулу, а в оракле эквивалентна? Вопрос только в том, почему пустая строка эквивалентна NULL в Оракле. Почему она у остальных не эквивалентна, как раз понятно: ровно потому же, почему 0 (ноль) не эквивалентен NULL для числовых типов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2015, 18:26:54 |
|
||
|
Вопрос про GROUP BY
|
|||
|---|---|---|---|
|
#18+
ЫIvan DurakПочему в пг и прочих '' (пустая строка) не эквивалентна нулу, а в оракле эквивалентна?
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.01.2015, 22:00:24 |
|
||
|
Вопрос про GROUP BY
|
|||
|---|---|---|---|
|
#18+
vyegorov, я подозреваю, вопрос был, скорее, о том, почему в Оракле решили не различать NULL и пустую строку, чем как именно это сделано технически: то есть только ли «to conserve space», или еще какая-то была мысль. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2015, 02:01:18 |
|
||
|
Вопрос про GROUP BY
|
|||
|---|---|---|---|
|
#18+
Ывопрос был, скорее, о том, почему в Оракле решили не различать NULL и пустую строку, чем как именно это сделано технически: то есть только ли «to conserve space», или еще какая-то была мысль. Мне кажется эти два момента связаны в случае с ORACLE. В Postgres'е одной из неприятных процедур является установка новой мажорной версии, т.к. меняется формат хранения данных. Исторически единственным способом апгрейднуть базу был полный логический pg_dump + pg_restore. Начиная с 8.4 (если не ошибаюсь) есть утилита `pg_upgrade`, но она не будет работать, если измениться физический формат хранения данных. В ORACLE формат не меняется десятилетиями. Туда привносят что-то новое, но все, что уже существует — не меняется. Апгрейд базы сводится к установке новых бинарников и апгрейду системного каталога. Чтобы научить Оракл различать пустые строки и NULL, нужно нарушить эту традицию (уж не знаю, прописана ли эта фича в лицензионном соглашении). Не думаю, что крупные клиенты буду рады геммору с логическим dump+restore петабайтных баз. Почему так произошло? Первый коммерческий ORACLE вышел в 1979 году. Мне думается, что тогда либо не заморачивались, либо реляционная теория была слишком свежа (ведь наличие BCNF формы связано с тем, что Э.Кодд "это и имел в виду", но "не точно сформулировал" — это слова К.Дэйта на видео-семинаре O'Reily). Возможно использовали тот же подход, что был и в dBase-подобных базах — там тоже отсутствует NULL. Сейчас можно только гадать. Но то, что физическая структура "заморожена" и приводит к тому, что эту "фичу" не исправляют. Правда все Оракло-воды тут на работе искренне считают, что это нормальное поведение системы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.01.2015, 10:18:27 |
|
||
|
Вопрос про GROUP BY
|
|||
|---|---|---|---|
|
#18+
vyegorov... Правда все Оракло-воды тут на работе искренне считают, что это нормальное поведение системы. Для Оракла как я понял весьма характерная ситуация, если почитать дискуссию о необходимости on update cascade для fk. А проблема формата на мой взгляд решается добавлением заголовка, а так же добавлением нового стандартного типа varchar, и объявлением varchar2 как depricated, если бы это было сделано лет 5-10 назад, уже бы потихоньку бы переехали, но думаю тут есть пара вещей которые могут быть выгодны ораклу: 1. отличие в поведении основного типа добавляет сложности при переносе систем на "другую" СУБД 2. работа над поддержанием старого varchar2 ( от которого по объективным причинам не избавиться быстро ) и стандартного varchar стоит денег, а коммерческая выгода непонятна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2015, 00:42:49 |
|
||
|
Вопрос про GROUP BY
|
|||
|---|---|---|---|
|
#18+
NikolayV81vyegorov... Правда все Оракло-воды тут на работе искренне считают, что это нормальное поведение системы. Для Оракла как я понял весьма характерная ситуация, если почитать дискуссию о необходимости on update cascade для fk. А проблема формата на мой взгляд решается добавлением заголовка, а так же добавлением нового стандартного типа varchar, и объявлением varchar2 как depricated, если бы это было сделано лет 5-10 назад, уже бы потихоньку бы переехали... Да вот тут 2 мысли бегают: (1) они уже в логической ловушке, т.е. для существующих данных отличить NULL от пустой строки — невозможно да и (2) они искренне считают, что так и должно быть. Т.е. зачем что-то исправлять, все же и так замечательно! Это похоже на то, как реагируют mysql-щики на поведение GROUP BY в других СУБД: “фу, почему так сложно, в mysql же все работало, а тут нельзя сделать `SELECT * FROM tab GROUP BY user_id`”. В случае с ORACLE крючок глубже. Я спорил на работе, приходилось все время уходить от СУБД вообще, в сторону теории. Так соглашаются, да, NULL отличен от всего. Но в ORACLE все хорошо… ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2015, 02:48:39 |
|
||
|
Вопрос про GROUP BY
|
|||
|---|---|---|---|
|
#18+
2 All Раз уж в дискуссии затронули Oracle и тему отличия или неотличия в нем пустой строки и нулла, то предлагаю для повышения уровня образованности ознакомиться с вот этой темкой: обсуждение про null и пустую строку в pl/sql-машине: основные выводы с дампами чуть ниже... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2015, 06:48:59 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=38859975&tid=1998220]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
80ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 242ms |
| total: | 418ms |

| 0 / 0 |
