1

我从会话中获取了一个列表(初始列表),其中包含以下顺序的客户 ID:-

[208700013, 30216118005, 30616118005, 10121005444, 206700013]

现在,我使用“IN”查询将这些 customerIds 作为一个集合传递给客户表,为此我将获取字符串中的 customerIds 列表以及其他值。

但是按以下顺序检索 customerIds:

10121005444
206700013
208700013
30216118005
30616118005

当我在视图中显示值时,这会产生问题。

如何获得与查询返回的列表顺序相同的顺序,该顺序在初始列表中设置?

4

3 回答 3

2

如果您只有一手结果集,那么使用比较器在 java 中对它们进行排序可能是最简单的。

如果您必须在 oracle 中执行此操作,您可以使用如下语句:

select *  // never do that in production
from someTable
where id in (10121005444, 206700013, 208700013, 30216118005, 30616118005)
order by decode(id, 10121005444, 1, 206700013, 2, 208700013, 3, 30216118005, 4, 30616118005, 5) 
于 2012-09-17T14:19:59.963 回答
0

您不能使用该IN子句指定顺序。我认为你有两个选择:

  1. 使用 执行查询IN,并在收到时对结果集进行排序
  2. 按顺序对每个指定的 id 发出单独的查询。这显然效率较低,但实现起来很简单。
于 2012-09-17T14:19:27.297 回答
0

你可以使用这个查询——

SELECT id FROM table
WHERE id in (10121005444, 206700013, 208700013, 30216118005, 30616118005) 
ORDER BY FIND_IN_SET(id,
    "10121005444, 206700013, 208700013, 30216118005, 30616118005");

第二个列表定义您希望结果集的顺序

于 2012-09-17T14:48:31.930 回答