说我有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。
谢谢你们。
答案 0 :(得分:1)
.includes
为您创建LEFT JOIN
:
Item.includes(:posts).where('posts.item_id IS NULL')