2016-10-03 42 views
0

我有一個,對位表,其中包括一個字段是equipment_id和存儲陣列鐵路Postgres的數組包含(<@)不包括零

我試圖搜索,對位表,以獲取數組有沒有任何記錄它包含特定的設備ID。例如: 所以我正在運行:

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

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

以下是存儲在equipment_id表,什麼陣列的幾個例子,上面的查詢會導致

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

如何獲得搜索忽略可能包含在數組中的nil。我將改變數組的存儲方式,所以從這裏開始不會有零值...但同時我需要考慮這些。

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

我不想使用& &運算符,因爲匹配表是巨大的,如果只比較一個設備ID是否存在,它將返回許多結果。我只想返回,如果所有的equipment_ids都包含(不包括任何nils)。

謝謝!

回答

0

如何從數組中刪除nil值?這很容易:

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

對不起,爲了混淆,搜索var(equipment_ids)不是具有零值的那個。表中的equipment_id字段保存nil值。 – cal1801

+0

只是修改了這個問題,希望能夠提供一些解釋 – cal1801

+0

您應該更新每條記錄並刪除它們。 – tadman