小编典典

在postgresql的“ uery”中联接两个单独的查询(可能或不可能)

sql

我在返回具有唯一字段的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个实例,其中:

  1. user_id不等于3
  2. post_id是唯一的
  3. 没有其他具有该post_id和helped_by_user_id为3的实例

编辑:

我已经在http://sqlfiddle.com/#!10/7a324/1/0上为此创建了一个SQLFiddle

作为记录,我使用的是Ruby 1.9.3,Rails 3.2.13和Postgresql(Heroku)


阅读 150

收藏
2021-04-28

共1个答案

小编典典

只是为了更容易阅读,将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;
2021-04-28