LINUX.ORG.RU

Сортировка в запросе по массиву

 


0

1

Есть массив значений [4,6,5,1] некоторого поля.

Получаем записи со значениями из этого массива. [code] select * from T where Filed1=ANY(ARRAY[4,6,5,1]) [/code]

Вопрос:

Нужно чтобы записи были в том порядке в котором значения в массиве, то есть Запись1 со значением 4 Запись2 со значением 6 Запись3 со значение 5 Запись4 со значением 1

Можно использовать UNION c каждым значением по отдельности

[code] select * from T where Filed1=4 …. union select * from T where Filed1=1 [/code]

Вопрос: Можно ли добиться такой сортировки без использования UNION(UNION ALL), может быть ORDER BY

Добавь в селект array_position и ORDER BY.

SELECT *, array_position(ARRAY[4,6,5,1], Filed1) AS position
FROM T
WHERE Filed1=ANY(ARRAY[4,6,5,1])
ORDER BY position;

Но, наверное, поле для сортировки можно добавить в таблицу, чтоб не мучиться потом?

vvn_black ★★★★★ ()
Последнее исправление: vvn_black (всего исправлений: 3)