SQL查询技巧

时间:2010-06-08 22:19:44

标签: sql

我需要做

select * from xxx where name in (a,b,c...);

但我希望结果集的顺序为(a,b,c...)。这有可能吗?

4 个答案:

答案 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功能,因此您可以使用它来清理它。