我在Postgresql上设置了以下数据:
create table data (
id int,
stage varchar(255),
name varchar(255)
);
id stage name
----------------------------
1 pyramid act 1
2 pyramid act 2
3 NULL act 3
4 NULL act 4
5 NULL act 5
6 NULL act 6
7 NULL act 7
8 NULL act 8
9 NULL act 9
10 NULL act 10
11 NULL act 11
12 NULL act 12
13 shangri la act 13
我查询所有数据表,并以空值last / limit分段:
select *
from data
order by stage asc nulls first
limit 5;
结果:
id stage name
----------------------------
6 NULL act 6
3 NULL act 3
4 NULL act 4
5 NULL act 5
7 NULL act 7
----------------------------
更改极限值时出现不同的排序结果的问题:
select *
from data
order by stage asc nulls first
limit 3;
结果:
id stage name
----------------------------
4 NULL act 4
3 NULL act 3
5 NULL act 5
----------------------------
PS:我正在使用Postgresql PostgreSQL 10.3
。
答案 0 :(得分:3)
这是标准行为。您在阶段列上仅排序 ,这意味着正在选择阶段列中具有相同值的任意行(并非始终以相同的方式解决联系) ,实际上Postgres不在乎它们,这就是为什么它会随机抽取行)
根据经验,除非您自己对输出进行明确排序,否则不会得到排序输出。
考虑以下示例,为您的数据添加id
列。每次执行SELECT语句时,假定该列具有唯一值(在示例数据中,则如此),这将带来相同的行。为此,您可以在列id
上定义主键或添加唯一约束。
select *
from data
order by stage asc nulls first, id
limit 3;
示例数据中的输出始终相同:
id stage name
----------------------------
3 NULL act 3
4 NULL act 4
5 NULL act 5