sql 查询语句的排序问题:使用in的内容排序,怎么写

select * from tab where id IN(123,432,654,142,232,901,113) ;
这样查出来的结果是按照id的顺序排列的,
我想要结果按照IN(123,432,654,142,232,901,113) 的先后顺序排,怎么写?

我使用的是postgre 数据库。

12个回答

为什么不对查询的结果集做一次排序呢?

u013090676
暮之雪 回复三哥_可以用微笑掩盖一切: 我的意思是,先查询出结果,然后再用代码做一轮排序就可以了啊
2 年多之前 回复
weixin_40836203
三哥_可以用微笑掩盖一切 什么意思?这里的需求就是,把查询按照in里面的id顺序排序
2 年多之前 回复

在sql里面用for循环?

weixin_40836203
三哥_可以用微笑掩盖一切 in( '',''),我用的postgre 数据库,不是用的oracle
2 年多之前 回复
cxy20170309
Ice_Blue_Brother 回复msx985211: oracle
2 年多之前 回复
msx985211
写程序的项目经理 回复三哥_可以用微笑掩盖一切: 你的是什么数据库
2 年多之前 回复
cxy20170309
Ice_Blue_Brother 回复三哥_可以用微笑掩盖一切: 我试过可以的
2 年多之前 回复
cxy20170309
Ice_Blue_Brother 回复三哥_可以用微笑掩盖一切: select * from goods_detail t where t.id in ('1317','1318','1316','1315') order by decode(t.id,'1317',1,'1318',2,'1316',3,'1315',4);
2 年多之前 回复
weixin_40836203
三哥_可以用微笑掩盖一切 我这样,测试SQL可以,完成,但是我到java 程序中就不行了,一直报错,我后台用的hibernate
2 年多之前 回复
weixin_40836203
三哥_可以用微笑掩盖一切 SELECT * FROM goods_detail WHERE goods_id IN ('1317','1318','1316','1315') ORDER BY (goods_id=1315,goods_id=1317,goods_id=1318,goods_id=316);
2 年多之前 回复

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') ;

尝试成功的同学记得回来赞我哦,有不懂的请在下方留言!!!

xianpeifu2866
就一小白攻城狮 如果排序数据较多,记得使用别名(至多排序300条数据,具体没测)
大约 2 年之前 回复

注:此函数只适用于Oracle数据库

in 只是查询条件而已,所以正常来说还是 order by id 就行了

qq_37511501
生活如水 回复三哥_可以用微笑掩盖一切: 那你就不要做IN了啊 , 写个for循环 list.add(结果) 这不就OK了吗。。。
2 年多之前 回复
weixin_40836203
三哥_可以用微笑掩盖一切 需求是按照in里面的id顺序排序
2 年多之前 回复
共12条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐