繁体   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