【问题标题】:ActiveRecord/Postgres - find all entities with nulls in array fieldActiveRecord/Postgres - 在数组字段中查找所有具有空值的实体
【发布时间】:2021-09-02 17:34:21
【问题描述】:

给定一个模型 User 和一个字符串数组列 device_ids,我如何查询所有以 null 作为该数组列元素的用户?

例如,某些用户的 device_ids 值无效:

user.device_ids
=> [null, "XYZABCDEFGH"]

我尝试按照this answer...中的建议进行查询...

User.where.not("(-1 = ANY(device_ids)) IS NULL")

...但我收到此错误:

ERROR:  operator does not exist: integer = character varying

还有其他方法可以在一个查询中获取所有用户吗?

【问题讨论】:

  • 就 SQL 而言,您可以使用 EXISTS (SELECT * FROM unnest(device_ids) a(e) WHERE e IS NULL) 之类的东西。 (但我不知道如何为 Rails 编写它。)但我建议不要使用数组,如果你不能原子地处理它们,即你需要查询它们的单个元素。使用关系方式的压力要小得多。
  • 非常感谢@stickybit!这对我帮助很大。我查询单个元素的唯一原因是我需要删除无效的元素。

标签: sql ruby-on-rails postgresql activerecord


【解决方案1】:

感谢@sticky bit 的帮助!我的最终解决方案是:

User.where("EXISTS (SELECT * FROM unnest(device_ids) a(e) WHERE e IS NULL)")

【讨论】:

    猜你喜欢
    • 2021-08-06
    • 2016-10-08
    • 2021-12-18
    • 2020-08-29
    • 2014-03-07
    • 2014-09-11
    • 2017-05-23
    • 1970-01-01
    • 2022-11-07
    相关资源
    最近更新 更多