Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 在PGSQL中通过JSON数组中的ID连接表_Postgresql - Fatal编程技术网

Postgresql 在PGSQL中通过JSON数组中的ID连接表

Postgresql 在PGSQL中通过JSON数组中的ID连接表,postgresql,Postgresql,我有一个表(称之为a),有一列(称之为c),其中包含以下格式的字符串化JSON数组: [ {"sys": {"type": "Link", "linkType": "Entry", "id": "27OfJChoPO894W4rA6bQ67"}}, {"sys": {"type": "Link&quo

我有一个表(称之为a),有一列(称之为c),其中包含以下格式的字符串化JSON数组:

[
  {"sys": {"type": "Link", "linkType": "Entry", "id": "27OfJChoPO894W4rA6bQ67"}},
  {"sys": {"type": "Link", "linkType": "Entry", "id": "2ygvvrBSPuWw0uTW4jdDP2"}}
]
请注意,数组的长度是可变的。id字段引用第二个表的id(B)。因此,我需要从A中选择所有字段,但用B中的一列填充c

我试图寻找JSON函数来帮助我获取ID,但我无法从ID数组进展到最后用B中的列填充它。因此,我目前的想法是创建一个新表来保存aB之间的关系。最好的方法是什么?

您可以展开数组并使用
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完成最后一步。