从SQL查询中检索时,在List中保留订单

时间:2012-09-17 14:16:35

标签: java oracle collections

我从会话中获得一个列表(初始列表),其中包含以下订单中的客户ID: -

[208700013, 30216118005, 30616118005, 10121005444, 206700013]

现在我将这些customerId作为一个集合使用“IN”查询传递给customer表,我在其中获取了stringI中的customerId列表以及其他值。

但是按照以下顺序检索customerIds:

10121005444
206700013
208700013
30216118005
30616118005

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

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

3 个答案:

答案 0 :(得分: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) 

答案 1 :(得分:0)

您无法使用IN子句指定订单。我认为你有两个选择:

  1. 使用IN执行查询,并在收到后对结果集进行排序
  2. 按顺序为每个指定的ID发出单独的查询。这显然效率较低,但是实现起来很简单。

答案 2 :(得分:0)

您可以使用此查询 -

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

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