我的postgres数据库中有一个json对象,如下所示
{"Actor":[{"personName":"Shashi Kapoor","characterName":"Prem"},{"personName":"Sharmila Tagore","characterName":"Preeti"},{"personName":"Shatrughan Sinha","characterName":"Dr. Amar"]}
已编辑(来自编辑:离开原版,因为它是无效的json,在我的编辑中我修复了它)
{
"Actor":[
{
"personName":"Shashi Kapoor",
"characterName":"Prem"
},
{
"personName":"Sharmila Tagore",
"characterName":"Preeti"
},
{
"personName":"Shatrughan Sinha",
"characterName":"Dr. Amar"
}
]
}
列的名称为xyz
,而我的对应content_id
。
我需要检索content_ids
的{{1}}。
我尝试了很多查询,其中这两个查询很有可能得到但仍然没有得到。
Actor & personName = Sharmila Tagore
SELECT content_id
FROM content_table
WHERE cast_and_crew #>> '{Actor,personName}' = '"C. R. Simha"'
答案 0 :(得分:0)
您应该使用jsonb_array_elements()
搜索嵌套的jsonb数组:
select content_id, value
from content_table,
lateral jsonb_array_elements(cast_and_crew->'Actor');
content_id | value
------------+-----------------------------------------------------------------
1 | {"personName": "Shashi Kapoor", "characterName": "Prem"}
1 | {"personName": "Sharmila Tagore", "characterName": "Preeti"}
1 | {"personName": "Shatrughan Sinha", "characterName": "Dr. Amar"}
(3 rows)
列value
属于jsonb
类型,因此您可以使用->>
运算符:
select content_id, value
from content_table,
lateral jsonb_array_elements(cast_and_crew->'Actor')
where value->>'personName' = 'Sharmila Tagore';
content_id | value
------------+--------------------------------------------------------------
1 | {"personName": "Sharmila Tagore", "characterName": "Preeti"}
(1 row)
注意,如果您使用json
(不是jsonb
),当然请使用json_array_elements()
。