SQLITE: вытягивать элементы в том же порядке, что и массив IN - PullRequest
1 голос
/ 22 мая 2019

У меня следующий запрос:

SELECT * from tWords where WordAton IN ("bbb", "aaa2", "ccc", "aaa1")

запрос возвращает сначала результаты для "aaa1", затем для "aaa2", затем для "bbb" и затем для "ccc". Есть ли способ вернуть результаты в порядке ввода массива, что означает сначала результаты для "bbb", а затем для "aaa2" ... и т. Д.

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 22 мая 2019

Вы можете применить условное упорядочение следующим образом:

SELECT * 
from tWords 
where WordAton IN ('bbb', 'aaa2', 'ccc', 'aaa1')
order by case WordAton
  when 'bbb' then 1
  when 'aaa2' then 2
  when 'ccc' then 3
  when 'aaa1' then 4
end 
1 голос
/ 22 мая 2019

В SQL (не только в SQLite) единственный способ всегда возвращать строки в заданном порядке - это предложение SQL ORDER BY ....Таким образом, короткий ответ: «Нет», простого способа возврата строк в порядке, заданном содержимым предложения IN (...), не существует.

Вы могли используйте общее табличное выражение (CTE) для определения порядка сортировки, но это обычно не стоит проблем.Это не то же самое, что упорядочение по содержимому предложения IN (...), но выглядит одинаково.(Вы упорядочиваете по порядку сортировки, указанному в CTE.)

with ordered_words as (
  select 1 as sort_order, 'bbb' as WordAton union
  select 2,               'aaa2' union
  select 3,               'ccc' union
  select 4,               'aaa1'
)
select t.WordAton
from tWords t
join ordered_words o on t.WordAton = o.WordAton
where t.WordAton in ('bbb', 'aaa2', 'ccc', 'aaa1')
order by o.sort_order;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...