SQLITE:以与IN数组相同的顺序提取项目

时间:2019-05-22 13:37:36

标签: sqlite

我有以下查询:

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

查询首先返回“ aaa1”的结果,然后返回“ aaa2”的结果,然后返回“ bbb”的结果,然后返回“ ccc”的结果。有没有一种方法可以按输入数组的顺序返回结果,这意味着首先是“ bbb”的结果,然后是“ aaa2”的结果……等等。

谢谢。

2 个答案:

答案 0 :(得分:2)

您可以像这样应用条件排序:

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 :(得分:1)

在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;