JSON对象上的联接表

问题描述 投票:0回答:1

我有表A,其中的JSON列f具有以下内容:

[{"name": "abc", "id": "1"}, {"name": "abcd", "id": "2"}, {"name": "abcde", "id": "3"} ]

我想在上述JSON对象内的id上加入另一个表B,但还要从JSON对象中获取属性name

我设法创建了以下查询:

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

返回以下结果:

id, name
1, "abc"
2, "abcd"
3, "abcde"

表B中的样本数据:

id, title, slug  
1, "title 1", "title-1"
2, "title 2", "title-2"
3, "title 3", "title-3"

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

预期结果:

id, name, title, slug
1, "abc", "title 1", "title-1"
2, "abcd", "title 2", "title-2"
3, "abcde", "title 3", "title-3"
postgresql postgresql-9.6
1个回答
0
投票

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)中获取所有相关值
© www.soinside.com 2019 - 2024. All rights reserved.