我有一个带有类似模式的 postgres 数据库
CREATE TABLE authors (
id integer NOT NULL
);
CREATE TABLE posts (
id integer NOT NULL,
author_id integer,
text text
);
CREATE TABLE comments (
id integer NOT NULL,
post_id integer,
ordinal integer DEFAULT 0,
author_id integer
);
给定一个特定的author_id
,我希望能够选择一批 20 个帖子:
- 不包括有该作者评论的帖子。
- 不是那个作者的帖子。
- 是否包括该帖子的 10 条最新评论。
我认为第 1 点正在扼杀我的查询时间。到目前为止,我一直在使用内部查询来解决这一点,比如
SELECT * from posts
WHERE posts.id NOT IN (
SELECT posts.id FROM posts JOIN comments ON posts.id = comments.post_id)
随着我的数据库的增长,这个查询变得更糟了。我不擅长 SQL;有一个更好的方法吗?我正在使用 ActiveRecord,如果这有帮助/伤害的话。