PostgreSQL多字段排序+limit问题,数据重复问题

在项目中:pgsql自定义函数,遇到 for循环中 limit 出来的数据时重复的问题,经过排查发现是排序不彻底导致的。

原sql:

SELECT
……
ORDER BY
	tagrule.dimension,
	tagrule.MINVALUE ASC 
	LIMIT 1 OFFSET i;

因为是在for循环中,offset 的值每次i++,但是后面发现该SQL会查询出重复的数据。

然后我就去掉limit ,排查发现,当 tagrule.dimension 一致时, tagrule.minvalue 存在null值,导致这时候的排序不彻底,后面offset取的值就可能会乱。(这里遇到的就是OFFSET 0 和OFFSET 1取到同一条记录了。)

因此需要再加入一个肯定的、稳定的字段进行排序,保证顺序是正确的,这样才能保证取数正确。(这里是id)

修改后:

SELECT
……
ORDER BY
	tagrule.dimension,
	tagrule.MINVALUE ASC 
	tagrule.ID ASC 
	LIMIT 1 OFFSET i;

你可能感兴趣的:(PostgreSQL,1024程序员节,postgresql,sql,数据库)