gpt4 book ai didi

json - postgresql jsonb 包含 key :value on second level

转载 作者:行者123 更新时间:2023-11-29 11:59:48 26 4
gpt4 key购买 nike

在postgresql中是否有可能在二级查询key:value

例如一行的 jsonb 字段如下所示:

{
"something": {
"v_id": "5544d28431f19",
"value": "xyz"
},
"something_else": {
"v_id": "5544d28431feb",
"value": "abc"
}
}

我想使用 v_id 值查询此行,例如:

  SELECT id, jsonb_field
FROM table_1
WHERE jsonb_field @> '{{"v_id": "5544d28431feb"}}'
;

但是,此查询无效。如何实现这样的查询?

编辑:

根据@CraigRinger 的评论:

这里的重点是我不知道顶级键,我想说“对于任何对象,是否有一个内部对象具有以下键和以下值”。

最佳答案

您可以使用横向连接 为表中的每一行调用jsonb_each。函数 jsonb_each 将每个节点变成一行,其中包含两列,分别称为 keyvalue:

select  value
from table_1
cross join lateral
jsonb_each(jsonb_field) sub
where value @> '{"v_id": "5544d28431feb"}';

完整示例(还没有对 Postgres 9.4 的 SQL Fiddle 支持):

create table table_1 (id int primary key, jsonb_field jsonb);
insert into table_1 (id, jsonb_field) values (42, '{
"something": {
"v_id": "5544d28431f19",
"value": "xyz"
},
"something_else": {
"v_id": "5544d28431feb",
"value": "abc"
}
}');

select value
from table_1
cross join lateral
jsonb_each(jsonb_field) t2
where value @> '{"v_id": "5544d28431feb"}';

这打印:

                   value                   
-------------------------------------------
{"v_id": "5544d28431feb", "value": "abc"}

关于json - postgresql jsonb 包含 key :value on second level,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30003389/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com