从Postgresql中jsonb字段内的数组中提取元素
在我的Postgresql表中,有一个名为从Postgresql中jsonb字段内的数组中提取元素,sql,postgresql,Sql,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]转
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
,则可以在中使用数组包含运算符(),而不是。例如:
SELECT *
FROM "Table2"
WHERE items::jsonb <@ (SELECT data->'list' FROM "Table" WHERE id=1)
使用jsonb\u array\u 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
定义为text
或varchar
,并包含一个值-但是名称(复数!)似乎表示另一个非规范化列 我不明白你到底需要如何使用列表中的值。请回答您的问题,并在尝试访问数组元素的位置添加完整的查询。我更新了问题并添加了实际查询。我认为这很接近,但仍然出现错误。我创建了这个演示@asanas:好吧,你是在比较一个整数和一个文本值。您需要强制转换数组的结果。看我的edit@asanas与您的问题无关,但是:您应该真正避免那些可怕的引用标识符。他们的麻烦远比他们值得的多。这个查询成功了。谢谢!。是的,他们很痛苦。我会避开他们。
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);