Postgresql内部选择与不同

时间:2015-07-29 13:18:58

标签: database postgresql postgresql-9.2

我正在使用Postgresql 9.2并有一个简单的学生表如下

id | proj_id | mark | name | test_date

我有2个查询,如下所述

select * from (select distinct on (proj_id) proj_id , mark, name, 
test_date from students )
t 
where t.mark <= 1000

VS

select distinct on (proj_id) proj_id , mark, name, test_date from   
students where mark <= 1000

当我运行每个查询超过10000条记录时,每个查询返回不同的结果,尤其是结果计数,但是对于少于3000条记录,结果将是相同的。

这是postgresql 9.2的错误还是我错过了什么?

1 个答案:

答案 0 :(得分:1)

您的查询产生两组不同的结果,因为它们以不同的方式应用逻辑。

  • 第一个查询是获取一组不同的结果,然后应用&#39;标记&#39;过滤器。
  • 第二个查询是应用&#39;标记&#39;过滤,然后获得一组不同的结果。

由于您没有应用任何排序,因此第一个查询可能会在每次运行时返回不同数量的行 - 因为(oq/clj-command! '{:update :person :set {:likes "animals"} :where [(= :name "Bob")]}) 字段可能包含与{相关的任何值{1}}。