使用Rails和Postgres我正在处理复杂的SQL查询以返回具有以下条件的所有帖子:
我已构建查询以返回发布的最后一条评论未由该特定用户创作的帖子,但我无法解决如何修改此问题以返回没有评论的帖子。< / p>
Post
.joins(:comments)
.joins(
"INNER JOIN (
SELECT DISTINCT ON (commentable_type, commentable_id) commentable_type, commentable_id, id
FROM comments
WHERE comments.author_id != #{user.id}
ORDER BY commentable_type, commentable_id, created_at DESC, id
) most_recent_comments ON (
most_recent_comments.id = comments.id
)"
)
有什么建议吗?
答案 0 :(得分:0)
想想我实际上已经弄明白了。我需要使用includes
对注释执行左外连接,然后在第二个joins
方法中执行相同操作:
Post
.includes(:comments)
.joins(
"LEFT outer JOIN (
SELECT DISTINCT ON (commentable_type, commentable_id) commentable_type, commentable_id, id
FROM comments
WHERE comments.author_id != #{user.id}
ORDER BY commentable_type, commentable_id, created_at DESC, id
) most_recent_comments ON (
most_recent_comments.id = comments.id
)"
)