我正在使用SQLite,并且我提供了要检索的id
值列表。但是,这些id
值的顺序很重要,我想以相同的顺序检索记录。
例如,
SELECT
*
FROM
todos
WHERE
todos.id in ( 1, 3, 2, 4 )
返回:
1
2
3
4
但我希望它以与提供的id
值相同的顺序返回,如下所示:
1
3
2
4
我已经看过MySQL和PostgreSQL的答案,但没有看到SQLite的答案。
答案 0 :(得分:2)
在obscure SQLite forum中找到它。
这是一种整齐的方式来排序非常具体的东西,但有助于以编程方式生成。
要获得所需的顺序,您可以使用以下内容:
SELECT
*
FROM
todos
WHERE
todos.id in ( 1, 3, 2, 4 )
ORDER BY
CASE todos.id
WHEN 1 THEN 1
WHEN 3 THEN 2
WHEN 2 THEN 3
WHEN 4 THEN 4
END
按以下顺序返回记录:
1
3
2
4
如您所见,您可以手动指定每条记录的顺序。如果您手动执行此操作,这将非常费力,但如果您使用的是编程语言,则可以轻松编程并附加到查询中。
例如,我在Android / Java上使用它并最终做了类似的事情来生成这个ORDER BY
子句:
String orderBy = "CASE todos.id ";
int i = 1;
for ( int id : ids ) {
orderBy = orderBy.concat( " WHEN " + id + "' THEN " + i );
i++;
}
orderBy = orderBy.concat( " END");
// Append `orderBy` to your normal SQLite query.