1

说我有Item that has_many Posts

我需要选择没有任何帖子的项目。

我目前的解决方案是这样的:

Item.where("NOT EXISTS (SELECT 1 FROM posts p WHERE p.item_id = items.id)")

这是最好的方法吗?也许应该以某种方式使用 OUTER JOIN ?


阅读您的建议后 - 我使用了以下代码:

Item.includes(:posts).where(:posts => {:item_id => nil})

或使用 Squeel gem:

Item.includes{:posts}.where{posts.item_id == nil}

我喜欢它,因为它不需要任何手动 SQL。

多谢你们。

4

1 回答 1

1

为您.includes创建一个LEFT JOIN

Item.includes(:posts).where('posts.item_id IS NULL')
于 2013-09-11T17:07:13.237 回答