参数中的Postgresql-9.1更改了排序顺序
我有一些ID,它已经按顺序排序(658267855456666)。我在select查询中传递了此输入以获取数据,但在输出中排序顺序将更改并返回结果(456666582678555)参数中的Postgresql-9.1更改了排序顺序,postgresql,orm,Postgresql,Orm,我有一些ID,它已经按顺序排序(658267855456666)。我在select查询中传递了此输入以获取数据,但在输出中排序顺序将更改并返回结果(456666582678555) 从blc\u sku中选择sku id,其中sku id位于(658267855456666)但输出返回为 但是预期的结果呢, 请帮我解决这个问题 t=> with v(a) as (values (2),(1),(3)) select * from v t-> where a in (1,2,3) t-
从blc\u sku中选择sku id,其中sku id位于(658267855456666)
但输出返回为
但是预期的结果呢,
请帮我解决这个问题
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)
您可以看到,结果是按照满足数据的顺序,而不是按照您在中设置的顺序。尽管如此,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)
您可以看到,结果是按照满足数据的顺序,而不是按照您在中设置的顺序。尽管如此,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)
谢谢沃森。很好,谢谢你,沃森。它很好用。。