我有一些 ID,它们已经按排序顺序排列 (65826 ,78555,456666) 。我在选择查询中传递此输入以获取数据,但在输出中排序顺序将更改并返回结果为 (456666,65826,78555);
select sku_id from blc_sku where sku_id in(65826 ,78555,456666)
但输出返回为
sku_id 65286 78555 456666
但预期的结果,
sku_id 456666 65286 78555
请帮我解决这个...
最佳答案
t=> with v(a) as (values (2),(1),(3))
select * from v
t-> where a in (1,2,3)
t-> ;
a
---
2
1
3
(3 rows)
您看到的结果是符合数据的顺序,而不是您在 IN
中设置的顺序。尽管 Postgres 不保证这种行为(并且您无法预测数据的满足顺序 - 它取决于缓存和我不知道的其他事情)。如果你想要有序的结果集使用 ORDER
指令:
t=> with v(a) as (values (2),(1),(3))
select * from v
where a in (1,2,3)
order by a desc;
a
---
3
2
1
(3 rows)
如果您有一个预先排序的列表,您可以根据它加入初始数据,如下所示:
t=> with v(a) as (values (2),(1),(3))
, ordered (v,o) as (values(1,0), (2,1), (3,2))
select v.* from v
join ordered on v.a=ordered.v
order by o;
a
---
1
2
3
(3 rows)
关于Postgresql - 9.1 IN 参数更改了排序顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45440561/