过滤掉至少一个不符合给定条件的关联的记录

时间:2015-10-31 20:31:59

标签: mysql ruby-on-rails

假设我有postscategorizations

Post(id)

Categorization(post_id, topic_id)

我想获取不属于特定主题ID的帖子。

在我的情况下,我在加入Post to Categorizations时必须使用内连接,因为我还有其他要执行的过滤器。

我该怎么做?

我尝试了以下内容:

Post.joins(:categorizations).where("categorizations.topic_id != ?", doomed_topic_id)

但这会返回仍有其他主题的帖子。它仅适用于只有一个主题恰好是不需要的主题的帖子。

例如,如果我有一个包含2个类别的帖子(注定的topic_id和另一个主题),则此查询失败并实际获取它,而不是将其过滤掉。

1 个答案:

答案 0 :(得分:0)

尝试:

Posts.where('not exists
               (select * from categorizations
                  where post_id = posts.id and
                        topic_id = ?)', doomed_id)