Согласованность базы данных с SQL Order By и null - PullRequest
0 голосов
/ 26 ноября 2008

У меня есть столбец в моей базе данных (флаг) с типом varchar (1), который заполняется либо Y, либо NULL (это так, не в моем контроле).

В SQL Server, выполняя возрастающий порядок по запросу, NULL располагается сверху. Должно ли это быть согласованным для Oracle и DB2?

Если вместо этого у меня есть COALESCE в столбце, чтобы убедиться, что оно не является нулевым в запросе, могу ли я столкнуться с какими-либо проблемами производительности (из-за сканирования таблиц и т. П.)?

EDIT

Запрос должен быть согласованным по всем 3 базам данных, в противном случае мне придется обрабатывать его в коде, поэтому я думаю об использовании функции COALESCE

EDIT

Я выбрал Pax в качестве ответа, поскольку он касался обеих частей вопроса и дал полезный обходной путь, однако, благодаря me.yahoo.com/a/P4tXrx за ссылку на здесь

Ответы [ 3 ]

3 голосов
/ 26 ноября 2008

Я точно знаю, что DB2 Express и DB2 (по крайней мере до v8) не поддерживают предложение NULLS FIRST.

Если вы хотите портативное решение, вам, возможно, придется выбрать что-то вроде:

select * from tbl where fld is null
    union all select * from tbl where fld is not null

Я думаю, что результат объединения (по крайней мере, в DB2 вам нужно будет проверить остальные) гарантированно будет правильно упорядочен.

Объединение будет влиять на производительность, так как вы запускаете функцию для каждой возвращаемой строки. Однако это зависит от количества строк в базе данных.

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

РЕДАКТИРОВАТЬ: я только что проверил стандарт SQL, и не гарантируется, что запросы, объединенные с UNION ALL, упорядочены; они могут быть смешаны. Похоже, вам, возможно, придется прибегнуть к коду, выполняющему два разных запроса, как упомянуто выше.

1 голос
/ 26 ноября 2008

В SQL Server, выполняя возрастающий порядок по запросу, NULL располагается сверху. Должно ли это быть согласованным для Oracle и DB2?

Видимо, это относительный новичок в стандарте .

Основные функции стандарта SQL не определяют явно порядок сортировки по умолчанию для Null. С расширением SQL: 2003 T611, «Элементарные операции OLAP», значения NULL можно сортировать до или после всех значений данных, используя предложения NULLS FIRST или NULLS LAST из списка ORDER BY, соответственно. Однако не все поставщики СУБД реализуют эту функцию. Поставщики, которые не реализуют эту функцию, могут указать различные способы сортировки пустых значений в СУБД.

0 голосов
/ 26 ноября 2008

В Oracle вы можете сделать это:

ORDER BY value NULLS FIRST 

или

ORDER BY value NULLS LAST

Попробуйте в SQL Server

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...