преднамеренно большое значение в SQL - PullRequest
1 голос
/ 20 августа 2010

Хорошо, я должен поставить нулевые значения в последнюю очередь.Запрос должен выполняться под Oracle и MySQL.

Я уже получил

ORDER BY

    CASE WHEN some_table.ord IS NULL THEN 9999999999 ELSE some_table.ord END

Я должен использовать значение> max (some_table.ord) вместо 9999999999.

Я думаю, что подзапрос для определения этого значения слишком уродлив здесь.

Если бы это был C ++, я мог бы использовать для этой цели некоторый макрос, например INT_MAX.Можете ли вы назвать его кросс-СУБД SQL-близнец?

ОБНОВЛЕНИЕ

Вопрос в том, могу ли я поставить что-то красивое вместо 9999999999, чтобы запрос работалв Oracle и MySQL

не как ставить нулевые значения последними

Ответы [ 3 ]

5 голосов
/ 20 августа 2010

Используйте дополнительный столбец для нулевого флага:

order by 
   case when some_table.ord is null then 2 else 1 end ,
   some_table.ord

Или, если у вас достаточно знаний о значениях, которые может принимать этот столбец, просто жестко закодируйте число, которое больше, чем что-либо там:

order by coalesce(some_table.ord, 9999999999)
4 голосов
/ 20 августа 2010

В Oracle это просто

ORDER BY some_table.ord NULLS LAST
0 голосов
/ 20 августа 2010

Может работать что-то вроде следующего:

SELECT S.VAL1, S.VAL2, S.VAL3, COALESCE(S.ORD, O.MAX_ORD+1) AS ORD
  FROM SOME_TABLE S,
       (SELECT MAX(ORDER) AS MAX_ORD FROM SOME_TABLE) O
  WHERE S.whatever = whichever AND
        S.something <> something_else
  ORDER BY ORD

Не уверен, разрешает ли MySQL подзапросы в списке FROM. Идея здесь состоит в том, чтобы избежать использования магического значения для обработки значения NULL.

Делись и наслаждайся.

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