Postgresql

Postgres用數組查詢數組列

  • May 24, 2021

我有一個 postgres 視圖“people_codes”,其中有一列是整數的 ARRAY_AGG。我正在嘗試使用整數數組查詢可能具有這些程式碼之一的所有行的視圖

uuid    |  name     |     codes
(uuid)  | (varchar) |   (bigint[])
abc-def |  john     |  {5294, 5295}
bee-aaa |  jane     |  {1123, 2222}
111-a98 |  bob      |     {1933}

我可以用一個整數成功查詢視圖

SELECT * FROM people_codes WHERE 5294 = ANY (codes);

這將返回我需要的行:

abc-def   | john    |    {5294, 5295}    |

我的最終目標是能夠使用數組查詢我的視圖,以便我可以找到具有一個或多個給定程式碼的所有行。

我嘗試將我的值更改為 int,也將其轉換為 ::bigint

$$ $$,但在括號中出現語法錯誤。無論括號 (、[ 或 {

SELECT * FROM people WHERE [5294,1933]::bigint[] = ANY (codes);

ERROR:  syntax error at or near "["
LINE 6: SELECT * FROM people WHERE [5294,1933]::bigint...

我也嘗試過使用 @> 和 && 比較運算符,但又遇到了值數組的問題。它試圖暗示添加一個顯式類型轉換,這就是我認為正在做的事情。嘗試將搜尋值放入 ARRAY_AGG 也是如此

SELECT * FROM people WHERE codes @> IN (5294,1933)::bigint[];

ERROR:  operator does not exist: bigint[] @>
LINE 8: ...ROM people WHERE codes @> IN (529...

獲取包含查詢數組中任何元素的行的正確查詢是什麼?通過搜尋數組

$$ 5294,1933 $$我期待為 john 和 bob 找回行數

如手冊中所述,有兩種方法可以指定數組常量

On 是使用array[...]符號:

SELECT * 
FROM people 
WHERE codes && array[5294,1933]::bigint[]

或者使用使用的字元串{..}

SELECT * 
FROM people 
WHERE codes && '{5294,1933}'::bigint[]

text我更喜歡第一個,因為當數據類型本身需要引案例如數組時,它也沒有問題。

引用自:https://dba.stackexchange.com/questions/292166