Postgresql 在PGSQL中通过JSON数组中的ID连接表
我有一个表(称之为a),有一列(称之为c),其中包含以下格式的字符串化JSON数组:Postgresql 在PGSQL中通过JSON数组中的ID连接表,postgresql,Postgresql,我有一个表(称之为a),有一列(称之为c),其中包含以下格式的字符串化JSON数组: [ {"sys": {"type": "Link", "linkType": "Entry", "id": "27OfJChoPO894W4rA6bQ67"}}, {"sys": {"type": "Link&quo
[
{"sys": {"type": "Link", "linkType": "Entry", "id": "27OfJChoPO894W4rA6bQ67"}},
{"sys": {"type": "Link", "linkType": "Entry", "id": "2ygvvrBSPuWw0uTW4jdDP2"}}
]
请注意,数组的长度是可变的。id字段引用第二个表的id(B)。因此,我需要从A中选择所有字段,但用B中的一列填充c
我试图寻找JSON函数来帮助我获取ID,但我无法从ID数组进展到最后用B中的列填充它。因此,我目前的想法是创建一个新表来保存a和B之间的关系。最好的方法是什么?
您可以展开数组并使用JOIN
条件中的元素
SELECT
*
FROM
a,
json_array_elements(c) as elems
JOIN b ON b.id = elems -> 'sys' ->> 'id'
但是,请考虑规范化您的数据。如果不需要JSON数据,就不应该直接存储它,尤其是数组很难处理。如果您可以将数据保存到适当的表/列中,那么每一个操作(更新、搜索、筛选,当然还有连接)都会更简单、更快。此外,您还有机会获得适当的索引。谢谢您的建议!这是一项正在进行的工作,将数据从基于内容文档的数据库导出到SQL数据库,然后将插件同步到Google BigQuery。因此,这个SQL DB不需要任何更新、复杂的搜索或过滤,因为我只需要能够根据BigQuery上的id获取特定字段。我需要获取值,但理想情况下,我仍然需要将值合并回表中的单个id,而不是c列上每个值对应一行。通过执行
string\u agg
和groupby
id完成最后一步。