我在返回具有唯一字段的postgresql查询中的前X条记录时遇到了很大的帮助,现在遇到了我遇到的问题,并尝试尽我所能进行优化(尽管我通常不喜欢提前加载优化,这是一种独特的情况)。
想象一个应用程序中的三个实体:
User Post Instance # An instance is just a reference to a post
字段看起来像这样:
User id Post id user_id name Instance id user_id post_id helped_by_user_id
要求 :
返回10个实例,其中:
编辑:
我已经在http://sqlfiddle.com/#!10/7a324/1/0上为此创建了一个SQLFiddle 。
作为记录,我使用的是Ruby 1.9.3,Rails 3.2.13和Postgresql(Heroku)
只是为了更容易阅读,将100%的功劳归功于@CraigRinger,最适合我的最终解决方案是:
SELECT DISTINCT ON (post_id) * FROM instances i WHERE i.user_id <> 3 AND i.helped_by_user_id IS NULL AND NOT EXISTS ( SELECT 1 FROM instances ii WHERE ii.post_id = i.post_id AND ii.helped_by_user_id = 3 ) ORDER BY i.post_id LIMIT 10;