select * from tab where id IN(123,432,654,142,232,901,113) ;
这样查出来的结果是按照id的顺序排列的,
我想要结果按照IN(123,432,654,142,232,901,113) 的先后顺序排,怎么写?
我使用的是postgre 数据库。
in 只是查询条件而已,所以正常来说还是 order by id 就行了
为什么不对查询的结果集做一次排序呢?
我个人感觉者需求不太合理啊,是什么原因要让你这样排序啊
在sql里面用for循环?
order by id 就可以了。至于是升序用asc,降序desc。默认是升序的
order by 后面跟decode 或者case when 然后对你想要的排序赋值1,2,3就可以了
使用decode进行按规则排序
例如: abc cdb acf abm
按此顺序 abc acf abm cdb 排列
order by decode(id,'abc',1,'acf',2,'abm',3,'cdb',4) [asc,desc]
试过了不行啊
select * FROM goods_detail WHERE goods_id IN (4512,4544,4533)
ORDER BY decode(goods_id,'4512',1,'4544',2,'4533',3) DESC;
[Err] ERROR: column "id" does not exist
LINE 2: ORDER BY decode(ID,'4512',1,'4544',2,'4533',3) DESC;
可以用order by (CASE WHEN pc.is_pack in(0,1) THEN 0 ELSE 1 END)这种来排序,不过如果in里面的id是动态的,或者太多,就没办法了
试了你们的办法,都行不通,虽然麻烦,我还是使用java代码实现了
我来装个b,使用instr函数轻松解决;
下面是演示demo:
select * from tab where id IN(123,432,654,142,232,901,113) order by instr (id,'123,432,654,142,232,901,113') ;
尝试成功的同学记得回来赞我哦,有不懂的请在下方留言!!!
注:此函数只适用于Oracle数据库