我尝试在具有数组值的表上执行连接,其中数组中的每个元素都成为新行。
我正在研究从非常不同的json格式中提取特定键的数据库。根据我的提取查询,初始数据看起来不同。随着
SELECT id, content->'data' FROM other_table
WHERE content->'data' IS NOT NULL;
我明白了:
-----------------------------
id (int) | data (json)
-----------------------------
1 | [abc, def]
2 | [ghi, jkl]
3 | mno
并且
SELECT id, content->>'data' FROM other_table
WHERE content->>'data' IS NOT NULL;
我明白了:
-----------------------------
id (int) | data (text)
-----------------------------
1 | ["abc", "def"]
2 | ["ghi", "jkl"]
3 | "mno"
我想最终:
----------------
id | data
----------------
1 | abc
1 | def
2 | ghi
2 | jkl
然而,
SELECT id, json_array_elements(data)
FROM (SELECT id, content->'data' as data FROM other_table
WHERE content->'data' IS NOT NULL) s
我一直在
ERROR: cannot call json_array_elements on a scalar
SQL state: 22023
我认为问题在于未映射的特定行'进入json数组,但只是单个元素。
如何将这些单个元素转换为数组?
我看了https://www.periscopedata.com/blog/the-lazy-analysts-guide-to-postgres-json,据说这应该是可能的。
我使用的是postgres 10.2。