首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Postgres:连接ID上嵌套在JSON中的表

问Postgres:连接ID上嵌套在JSON中的表
EN

Stack Overflow用户
提问于 2014-09-19 20:02:23
回答 1查看 1.5K关注 0票数 1

我在postgres中创建了两个表,每个表包含两个列、一个uuid列和一个包含JSON的列。

表A(省):

第1栏(ProvinceID):

"112233“

第2栏(JSON):

代码语言:javascript
复制
{
    "id": "123",
    "name":"Ontario",
    "cities": [
     "456",
     "789",
     "112",
     "141"
    ],
    "status": 0
}

表B(城市):

第1栏(CityId):

"465“

第2栏(JSON):

代码语言:javascript
复制
{
    "id": "456",
    "name":"Toronto",
    "NHL Team": 1
    "Population": 4000000
}

在这个例子中,一个省与城市有一对多的关系。到目前为止,我没有做到的是将表A(省)中的一个省加入到表B(城市)中的所有城市。我没有这样做,因为CityId作为嵌套字段存储在表A(省)中。

例如:

代码语言:javascript
复制
FROM Provinces JOIN Cities on (Provinces.JSON->'Cities' = Cities.CityId)

我试验了内置的JSON函数#>、->、json_array_elements --我似乎找不到返回正确输出的解决方案。

任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-19 20:36:39

代码语言:javascript
复制
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属性的大小写为首字母。如果它有第一个大写字母,那么更改上面的代码。

如果Cities表中的text类型为text,则不需要将JSON -> 'cities'转换为integer。

顺便说一句,这看起来像糟糕的数据库设计。JSON并不能代替好的设计。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25941591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档