在Rails中反转IN

时间:2016-07-14 07:33:58

标签: sql ruby-on-rails

我觉得很愚蠢,但我找不到答案。

如果我有一个具有许多属性的用户,给定一个属性列表,我可以问这样的东西:

$q.when(remoteCall).then(...)

使用适当的连接或包含或其他。

但是,我不知道如何找到这些用户的逆集。也就是说,给定100个用户,如果结果返回75个条目,我不知道如何找到其他25个用户!

我想

User.where("attributes.id IN ?", list_of_attribute_ids)

可能有用(类似地,User.where.not),但它没有!相反,它会查找其任何属性不属于列表的用户,这很有用,但不是我想要的。

我知道怎么做的唯一方法就是:

User.where("attributes.id NOT IN ?", list_of_attribute_ids)

这有点像id不在的select用户的SQL(收集id列表)。

但这是大规模不具备性能,并且通常无法应对具有多个(百)条目的数据库。

你是怎么做到的?

1 个答案:

答案 0 :(得分:0)

我认为你可以使用左外连接,比如评论中提到的@Vishal。

请参阅指南:http://guides.rubyonrails.org/active_record_querying.html#left-outer-joins

rails 4:

joins("LEFT OUTER JOIN <something>")

rails 5:

left_outer_joins(:something)