Действительно ли возможно использовать и порядок и где в едином запросе

Знак доллара: $

5
задан Svante 17 July 2009 в 08:14
поделиться

3 ответа

Есть несколько способов решить эту проблему.

1 / Измените данные так, чтобы в таблице было фактически 10 (а не NULL):

update table TBL set FLD = 10 where FLD is null;

2 / Измените свой запрос чтобы вернуть разные значения для NULL:

select FLD1, FLD2, case where FLD3 is null then 10 else FLD3 end from ...

3 / Создайте представление для автоматического выполнения вышеуказанного варианта 2.

Я бы предпочел вариант 1, поскольку он, вероятно, будет наиболее эффективным.

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

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

Это ' Намного лучше укусить пулю и просто установить их на 10 в базе данных. Это позволит СУБД лучше оптимизировать запросы. И, если вам когда-нибудь понадобится использовать 10 для другого реального уровня приоритета, просто измените все текущие 10 на 11 (или 9999) перед тем, как начать.

2
ответ дан 14 December 2019 в 08:57
поделиться

Вот небольшой пример, который показывает, как преобразовать NULL в значение, а затем отсортировать его.

create table test
(
    priority int null,
    detail varchar(10)
)

insert into test values (1, 'one')
insert into test values (3, 'three')
insert into test values (8, 'eight')
insert into test values (9, 'nine')
insert into test values (null, 'ten')

select ISNULL(priority, 10), detail from test order by ISNULL(priority, 10)

Ключ ISNULL в поле значения NULL для преобразования NULL в значение значение (10), которое вы хотите.

4
ответ дан 14 December 2019 в 08:57
поделиться

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

ORDER BY (IFNULL (Priority, 1000000)) или что-то вроде этого

1
ответ дан 14 December 2019 в 08:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: