首页 | 新闻 | 交流 | 问吧 | 文档 | 手册 | 下载 | 博客

收藏此问题 发表新评论

关于查询结果排序的问题

我有一个表,我写了一个语句进行查询
语句为    select * from table where id in (5,3,1)

查询出来的结果显示顺序是
ID为 1  的那一行在最前,然后是ID为3的,最后是5的.

我想他的顺序以括号里写的这种显示出来如何做?
也就是说如果语句为   select * from table where id in (5,3,1) 那么显示顺序为  5,3,1
如果语句为   select * from table where id in ( 5,7,1,4)  那么显示顺序为 5,7,1,4
昵称: 跑呀跑  时间: 2008-07-07 16:24:00
order by CASE WHEN id='5' THEN 3 WHEN id = '7' THEN 2 WHEN id = '1' THEN 1  ELSE id END;
不规则的貌似只能这样套进去。写动态sql试试,把in里面的东西一个个分出来,嵌套。
昵称: devotedsky  时间: 2008-07-07 17:45:00
三种方法:
1、用 union ,不推荐,速度较慢

2、用 楼上的方法 case 方法。推荐。

3、临时表/中间表方法
昵称: coolstr  时间: 2008-07-08 00:21:00
这种情况下的行为可能是未定义的,也就是最好不要依赖某种Implicit的规则,如果IN后面的序列是来自另一个表,可以把那个ID Join进来再做排序,如果只是几个固定的序列的话,这个事没有必要让数据库来做,在程序代码里排一下就行了
昵称: leric  时间: 2008-07-10 13:55:00