JSON对象上的联接表

我有一个表A,该表的JSON列Key具有以下内容:

equals

我想在上述JSON对象内的f上连接另一个表B,但还要从JSON对象中获取属性[{"name": "abc","id": "1"},{"name": "abcd","id": "2"},{"name": "abcde","id": "3"} ]

我设法创建了以下查询:

id

返回以下结果:

name

表B中的样本数据:

WITH sample_data_array(arr) AS (
   SELECT f FROM A
),sample_data_elements(elem) AS (
   SELECT json_array_elements(arr) FROM sample_data_array
)
SELECT CAST(elem->>'id' AS int) AS id,elem->'name' AS name FROM sample_data_elements

如何将此结果与表B合并,并从表中添加更多数据(列)?

预期结果:

id,name
1,"abc"
2,"abcd"
3,"abcde"
yesonghui 回答:JSON对象上的联接表

Click: demo:db<>fiddle

SELECT
    b.id,elems ->> 'name' as name,-- 3
    b.title
FROM
    a,json_array_elements(f) as elems     -- 1
JOIN
    b ON b.id = (elems ->> 'id')::int   -- 2
  1. 使用json_array_elements()将元素从json数组中取出
  2. 现在您可以加入JSON属性(在这种情况下:id属性为text,并将其转换为int值)
  3. 加入后,从b和数组元素(如name)中获取所有相关值
本文链接:https://www.f2er.com/2670019.html

大家都在问