如何获取表中不存在的 ID?(导轨)



我有一个 id 数组

given_ids = [1,2,3,4,5,6]

我想从表中不存在的given_ids中获取所有 ID。

我可以做:

present_ids = Model.where(id: given_ids).pluck('id') req_ids = given_ids - present_ids

但是,如果大小增加given_ids这对服务器来说将非常繁重。

有没有更好的方法?

实际上,我认为您在问题中提出的解决方案是最好的。

required_ids = given_ids - Model.where(id: given_ids).pluck(:id)

这是一个单一的简单查询,它只返回 id 列,因此数据库流量最小,然后你做数组算术。

您正在尝试查找不存在的记录(而不是不在给定数组集中的记录(,因此我看不到可能返回不存在的记录的查询。 :)

您可以搜索数组中未给出 id 的位置。

given_ids = [12,3,4,5,6]
1) req_ids = MODEL.find_by_sql("SELECT id FROM MODEL where id != all(array #{given_ids})").map{|row| row.id}
2) req_ids = MODEL.where.not(id: given_ids).pluck(:id)

我建议你使用原始sql,如下所示:

Model.find_by_sql(["SELECT a.id FROM (SELECT unnest(?, ',') as id) a WHERE a.id not in (SELECT t.id FROM model_table t WHERE t.id in (?))", given_ids.join(','), given_ids.join(',')])

也许不需要加入方法。

最新更新