我需要做
select * from xxx where name in (a,b,c...);
但我希望结果集的顺序为(a,b,c...)
。这有可能吗?
答案 0 :(得分:3)
我发现这个问题看起来像您原来的问题:Ordering by the order of values in a SQL IN() clause
答案 1 :(得分:0)
它的丑陋,但如果你控制查询,并且'in'子句中的数字很低,它就可以工作(beleive'in'子句限制为255个字符)
例如“IF name = a then 1 else if name = b then
2”
如果不这样做,可能最好使用类似的技术对客户端进行排序(假设客户端首先将信息注入'in'子句中)
-Ace
答案 2 :(得分:0)
执行此操作的方法将是特定于数据库的。
在Oracle中,您可以执行以下操作:
SELECT * FROM xxx
where name in (a,b,c...)
ORDER BY DECODE(name,a,1,b,2,c,3);
答案 3 :(得分:0)
IN语句非常有限,但您可以通过加入子查询来获得类似的效果。
这是一个例子:
SELECT x.*
FROM xxx as x
INNER JOIN ((select a as name, 1 as ord)
UNION
(select b as name, 2 as ord)
UNION
(select c as name, 3 as ord)) as t
ON t.name = x.name
ORDER BY t.ord
它非常难看,但它应该适用于任何sql数据库。 ord字段明确允许您设置结果的顺序。某些数据库(如SqlServer)支持ROWINDEX功能,因此您可以使用它来清理它。