我在postgres db中创建了2个表,每个表包含两列,一个uuid列和一个包含JSON的列。
表A(各省):
第1栏(省份ID):
“112233”
第2栏(JSON):
{
"id": "123",
"name":"Ontario",
"cities": [
"456",
"789",
"112",
"141"
],
"status": 0
}
表B(城市):
第1栏(CityId):
“465”
第2栏(JSON):
{
"id": "456",
"name":"Toronto",
"NHL Team": 1
"Population": 4000000
}
在这个例子中,一个省与城市有一对多的关系。到目前为止我没有做到的是将表A(省)中的一个省加入表B(城市)的所有城市。我没有这样做,因为CityId存储为表A(省份)中的嵌套字段。
e.g。
FROM Provinces JOIN Cities on (Provinces.JSON->'Cities' = Cities.CityId)
我已经尝试了内置的JSON函数#>, - >,json_array_elements - 我似乎找不到能够返回正确输出的解决方案。
感谢任何帮助。
答案 0 :(得分:3)
select *
from
(
select
id, name,
json_array_elements(JSON -> 'cities')::text::int as CityId,
status
from provinces
) provinces p
inner join
Cities c using (CityId)
在发布的JSON数据中,cities
属性的小写首字母。如果它有第一个大写字母,那么更改上面的代码。
如果CityId
表格中的Cities
属于text
类型,则无需将JSON -> 'cities'
投射到integer