Согласованность базы данных с помощью SQL Order By и NULL

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

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

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

РЕДАКТИРОВАТЬ

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

РЕДАКТИРОВАТЬ

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

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
2 087
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

В оракуле вы можете сделать это:

ORDER BY value NULLS FIRST 

или же

ORDER BY value NULLS LAST

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

Не работает в SQL. К сожалению, запрос должен соответствовать всем 3 базам данных, иначе я обрабатываю его в коде.

johnc 26.11.2008 03:54
Ответ принят как подходящий

Я точно знаю, что 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, будут упорядочены; они могут быть перемешаны. Таким образом, похоже, что вам, возможно, придется прибегнуть к коду, выполняющему два разных запроса, как указано выше.

In SQL Server, doing an ascending order by query, NULL is ordered at the top. Should this behaviour be consistent for Oracle and DB2?

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

The SQL standard's core functionality does not explicitly define a default sort order for Nulls. With the SQL:2003 extension T611, "Elementary OLAP operations", nulls can be sorted before or after all data values by using the NULLS FIRST or NULLS LAST clauses of the ORDER BY list, respectively. Not all DBMS vendors implement this functionality, however. Vendors who do not implement this functionality may specify different treatments for Null sorting in the DBMS.

Другие вопросы по теме