gpt4 book ai didi

sql - 如何查询 postgres json 列中的嵌套数组?

转载 作者:行者123 更新时间:2023-11-29 11:22:54 24 4
gpt4 key购买 nike

我有一些类似于下面的 json 的 json 存储在 postgres json 列中。我正在尝试查询它以识别一些错误输入的数据。我基本上是在寻找房屋描述与门牌号相同的地址。我不太清楚该怎么做。

{
"timestamp": "2014-10-23T16:15:28+01:00",
"schools": [
{
"school_id": "1",
"addresses": [
{
"town": "Birmingham",
"house_description": "1",
"street_name": "Parklands",
"addr_id": "4",
"postcode": "B5 8KL",
"house_no": "1",
"address_type": "UK"
},
{
"town": "Plymouth",
"house_description": "Flat a",
"street_name": "Fore Street",
"addr_id": "2",
"postcode": "PL9 8AY",
"house_no": "15",
"address_type": "UK"
}
]
},
{
"school_id": "2",
"addresses": [
{
"town": "Coventry",
"street_name": "Shipley Way",
"addr_id": "19",
"postcode": "CV8 3DL",
"house_no": "662",
"address_type": "UK"
}
]
}
]
}

我写了这个 sql,它将找到数据匹配的位置:

select *
FROM title_register_data
where address_data->'schools'->0->'addresses'->0->>'house_description'=
address_data->'schools'->0->'addresses'->0->>'house_no'

这显然只适用于第一所学校的第一个地址。有没有办法查询每所学校的所有地址?

最佳答案

横向使用jsonb_array_elements(),加入与你想要比较的元素的json数组深度一样多的次数:

select 
schools->>'school_id' school_id,
addresses->>'addr_id' addr_id,
addresses->>'house_description' house_description,
addresses->>'house_no' house_no
from title_register_data,
jsonb_array_elements(address_data->'schools') schools,
jsonb_array_elements(schools->'addresses') addresses
where addresses->>'house_description' = addresses->>'house_no';

school_id | addr_id | house_description | house_no
-----------+---------+-------------------+----------
1 | 4 | 1 | 1
(1 row)

关于sql - 如何查询 postgres json 列中的嵌套数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44075557/

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