【问题标题】:Rail postgres array contains (<@) dont include nilRail postgres 数组包含 (<@) 不包含 nil
【发布时间】:2016-10-04 01:23:35
【问题描述】:

我有一个 Matchups 表,其中包含一个设备 ID 字段并存储一个数组

我正在尝试搜索 Matchups 表以获取任何具有包含特定设备 ID 的数组的记录。例如: 所以我跑了:

search_equipment_ids = [1, 2, 3, 4, 5]

Matchup.where("equipment_id <@ ARRAY[?]", search_equipment_ids)

以下是存储在设备ID表中的几个数组示例以及上述查询的结果

[1, 2] = True
[3, 5] = True
[1, 2, 3] = True
[1, 2, nil, 3] = False

如何让搜索忽略数组中可能包含 nil。我将更改数组的存储方式,因此从现在开始不会有 nil 值……但同时我需要考虑这些。

我使用:https://www.postgresql.org/docs/9.5/static/functions-array.html 作为参考。

我不想使用 && 运算符,因为 Matchups 表很大,如果仅比较是否存在一个设备 ID,它将返回许多结果。如果包含所有设备 ID(不包括任何 nil),我只想返回。

谢谢!

【问题讨论】:

    标签: ruby-on-rails postgresql


    【解决方案1】:

    如何从数组中删除 nil 值?这很简单:

    Matchup.where(..., equipment_ids.compact)
    

    【讨论】:

    • 对不起,为了混淆,搜索变量 (equipment_ids) 不是具有 nil 值的变量。表中的 equipment_id 字段为 nil 值。
    • 刚刚修改了问题,希望能提供一些说明
    • 您可能应该通过更新每条记录并删除它们来摆脱它们。
    • 是的,这就是我现在正在做的事情......但是有 3000 多行......只是想看看是否有更简单的方法:)
    • 更简单的方法是保持数据清洁,而不必用黑客来处理混乱的代码。 3K 行算不了什么。如果是 3B,我会理解你的犹豫。
    猜你喜欢
    • 2014-11-18
    • 2016-03-13
    • 2020-10-10
    • 2013-03-21
    • 1970-01-01
    • 1970-01-01
    • 2017-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多