【发布时间】:2018-05-27 11:40:44
【问题描述】:
作为 Postgres 和 SQL 的新手,我在 Postgres 9.6 中有以下场景:
table1
"Myjson" JSON
"DateOfAcquisition" DATE
"Id" INT
在"Myjson" 中有一个列表,我用FOR 循环遍历它。
我的目标是将table1中的每个json列表的元素放在另一个表中:
table2
jsonelem1 INT
jsonelem2 INT
"DateOfAcquisition" DATE
"Id" INT
我已经编写了以下代码来解析 json 字段,但我不确定如何为第一个表的每条记录运行 for 循环。
DO
$BODY$
DECLARE
omgjson json := myjsonfield; -- this should change for every row of the first table
i json;
myJsonelem1 INT;
myJsonelem2 INT;
begin
FOR i IN SELECT * FROM json_array_elements(omgjson)
loop
myJsonelem2 i->> 'jsonsubfield'::INT;
INSERT INTO destinationTable VALUES (myJsonelem2,DateOfAcquisition);
END LOOP;
END;
$BODY$ language plpgsql
【问题讨论】:
-
请edit您的问题并添加一些示例 JSON 数据和基于该数据的结果。Formatted text 请no screen shots。 Edit您的问题不要在 cmets 中发布代码
-
在
FOR循环周围加上一个在表中循环的外部FOR循环:FOR var1, var2, ... IN SELECT ... FROM ... LOOP。 -
感谢劳伦斯,这就是我最后所做的。我真的想知道是否有更好的方法来做到这一点。在答案中使用双 for 循环。
-
我认为您的第一个“TABLE2”应该是“TABLE1”,因此冒昧地解决了这个问题。
-
一个用于测试的示例 JSON 值会对这个问题有很大帮助。
标签: json postgresql for-loop plpgsql set-returning-functions