Объединение 2 запросов без изменения порядка результатов

Я хочу выполнить запрос, который сначала упорядочит мне таблицу по полю приоритета, а затем в алфавитном порядке, например:


SELECT * FROM tipos where prioridad between 1 and 5 order by prioridad

Этот запрос возвращает 2 результата, отсортированных в порядке возрастания,


SELECT * FROM tipos WHERE prioridad is null ORDER BY nombre

И этот должен возвращать остальные, упорядочивая их по имени


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

(SELECT * FROM tipos where prioridad between 1 and 5 order by prioridad ) union 
(SELECT * FROM tipos where prioridad is null order by nombre)

возвращает следующее:

introducir la descripción de la imagen aquí

1
задан 02.12.2019, 17:36
2 ответа

ORDER всегда он применяется в конце любой консультации, в твоем случае, ты это применяешь в субконсультациях, но не после union а следовательно ты не можешь ждать ningГєn команду в особенности. Она soluciГіn так, что ты не касаешься cГіdigo serГ - во что-то asГ-:

SELECT *
       FROM (
           SELECT * FROM tipos where prioridad between 1 and 5
           union 
           SELECT * FROM tipos where prioridad is null
       ) T
       ORDER BY case when prioridad is not null then 1 else 2 end,
                prioridad, nombre

Прием, чтобы отделять две группы, состоит в том, чтобы использовать case when prioridad is not null then 1 else 2 end, давайте думать аргумент команды формы dinГЎmica, помещая вперед случаи dГіnde prioridad нет NULL, потом порядок, serГЎ prioridad и nombre. Со второй группой, в существо prioridad всегда NULL определяющий порядок serГЎ nombre.

Замечает: С другой стороны, твоя консультация может быть упрощенной много, проверяет ответ Мигеля по этому поводу.

1
ответ дан 02.12.2019, 20:34
  • 1
    Спасибо, упрощенная консультация пошла: SELECT * from tipos ORDER BY case when prioridad is not null then 1 else 2 end, prioridad, nombre, в действительности я был очень полезным case, вот то, что он искал. – Charls 02.12.2019, 18:05

Унифицируй твои консультации в одной, с двумя условиями, так как они на той же таблице. Консультация quedarГ - в asГ-:

SELECT * 
FROM tipos 
WHERE prioridad between 1 and 5 
    OR prioridad is null 
ORDER BY prioridad, nombre

Таким образом сначала мы выдаем первенство со стоимостью, которая интересует нас, и despuГ©s из-за недействительной стоимости. В continuaciГіn мы упорядочиваем сначала из-за первенства и despuГ©s по имени.

В подсказку LPZadkiel, в ней ordenaciГіn показывать, что возможно упорядочивать восходящий (по умолчанию, ASC) или нисходящий (DESC). Даже упорядочивать из-за каждого поля различного способа. Например:

SELECT * 
FROM tipos 
WHERE prioridad between 1 and 5 
    OR prioridad is null 
ORDER BY prioridad DESC, nombre ASC

, Если ты только хочешь показать одну condiciГіn распоряжения, всегда должен идти она Гєltima и ordenarГ - во все поля таким образом:

SELECT * 
FROM tipos 
WHERE prioridad between 1 and 5 
    OR prioridad is null 
ORDER BY prioridad, nombre DESC

типов Привета!

3
ответ дан 02.12.2019, 20:34
  • 1
    я agregarí в это ключевого слова ASC | DESC – LPZadkiel 02.12.2019, 17:43