我有表Animal
和字段specie
种类可以是["dog", "cat", "lion", "bird", "elephant", ...]
我们知道我们也可以通过以下方式找到所有记录:
@animals = Animal.all.where(specie: ["dog", "cat", "lion", "bird", "elephant", ...] )
假设我有10.000条记录和10.000种可以注册的不同物种。我只想要一个数组,其中包含数据库中所有未包括的物种。如何以最有效的方式做到这一点?
答案 0 :(得分:3)
假设您在某个地方的内存中有一个已知物种的集合:
species = ["dog", "cat", "lion", "bird", "elephant", ...]
missing_species = species - Animal.distinct.pluck(:specie)
答案 1 :(得分:1)
我也同意@chaitanya。在RAM中保留10k字符串根本没有效率。最好创建一个种类表并与Animal左连接。那么您可以排除相交的物种。
class Specie
has_many :animals
field :name
end
class Animal
belongs_to :specie
end
Specie.left_joins(:animals).where('animals.id' => nil).distinct.pluck(:name)