簡體   English   中英

從 Postgresql 中 jsonb 字段內的數組中提取元素

[英]Extract elements from an array inside a jsonb field in Postgresql

在我的 Postgresql 表中,我有一個名為data的 jsonb 字段,其中包含以下格式的數據:

{
 list:[1,2,3,4,5]
}

我使用查詢:

select data->'list' from "Table" where id=1

這給了我數組[1,2,3,4,5]

問題是我想在 IN 子句中的另一個 select 查詢中使用這個結果。 它不接受數組。

IN ([1,2,3,4,5])失敗

它想要:

IN (1,2,3,4,5)

所以,在我原來的查詢中,我不知道如何將 [1,2,3,4,5] 轉換為 1,2,3,4,5

我目前的查詢是:

select * from "Table2" where "items" in (select data->'list' from "Table" where id=1)

請幫忙

如果將搜索值轉換為jsonb ,則可以使用數組包含運算符 ( @> ) 而不是IN 例如:

SELECT *
FROM "Table2"
WHERE items::jsonb <@ (SELECT data->'list' FROM "Table" WHERE id=1)

請注意,如果items是 int ,則需要在轉換為jsonb之前將其轉換為char

SELECT *
FROM "Table2"
WHERE cast(items as char)::jsonb <@ (SELECT data->'list' FROM "Table" WHERE id=1)

dbfiddle 上的演示

使用jsonb_array_elements()將元素變成行

select t2.*
from table_2 t2
where t2.items in (select jsonb_array_elements_text(t1.data -> 'list')::int
                   from table_1 t1 
                   where t1.id = 1);

這假設items被定義為textvarchar並包含單個值 - 但是名稱(復數。)似乎表示另一個非規范化列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM