postgresql limit配合order by 查询数据混乱

392175090 发布于 2016/05/27 12:00
阅读 455
收藏 0
create table test(
a int,
b varchar(255)
);
create index idx_test on test(b);
insert into test(a,b) values(1,'2016-05-30'),(2,'2016-05-30'),(3,'2016-05-30'),(4,'2016-05-30'),(5,'2016-05-30'),(6,'2016-05-30'),(7,'2016-05-30'),
(8,'2016-05-30'),(9,'2016-05-30'),(10,'2016-05-30'),(11,'2016-05-30'),(12,'2016-05-30'),(13,'2016-05-30'),(14,'2016-05-30'),(15,'2016-05-30'),(16,'2016-05-30'),(17,'2016-05-30'),
(18,'2016-05-30'),(19,'2016-05-30'),(20,'2016-05-30'),(21,'2016-05-30'),(22,'2016-05-30'),(23,'2016-05-30'),(24,'2016-05-30'),(25,'2016-05-30'),(26,'2016-05-30'),(27,'2016-05-30');


select * from test order by b ;

 得到的第一个结果是 a=1

select * from test order by b limit 1  offset 0;

 得到的第一个结果是 a=27;

查了一下mysql5.6也有这个问题,排序优化导致的,5.5版本没有,5.7不知道有没有

大家有没有熟悉这个的,确认一下postgresql是否存在这个问题,谢谢!

加载中
0
mark35
mark35

b字段同样的值,排序结果是不定的。

select * from test order by b ; 结果是a1应该是插入顺序最先,但order by后肯定顺序就不定了

另,为啥b字段不设计成date类型呢

mark35
mark35
回复 @392175090 : 既然有相同值那么排序顺序就是不定的,就这么简单。要么order by再加上一个或者多个字段保证排序(顺序)结果唯一,要么就接受这种不定结果
3
392175090
问题是两条语句都有order by 而且使用limit 3 和limit 4 的结果会不一样,(3或4不一定,具体数字可自己试下) 跟字段类型无关,总会碰到值相同的情况,在实际应用中,大量记录中我只有2条记录的值一样,但是分页查询后就乱了
返回顶部
顶部