如何从1个表中选择许多行并将其插入另一个表中特定行的特定JSONB字段中?但是在单个原始SQL查询中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从1个表中选择许多行并将其插入另一个表中特定行的特定JSONB字段中?但是在单个原始SQL查询中相关的知识,希望对你有一定的参考价值。
postgres 10.3
我在名为sites
的表中大约有1000行
如果我这样查询
SELECT id, name from sites;
我将获得1000行。
我还有另一个名为jsonindexdocument
的表,其中单行的id为1,而名为index
的字段为JSONB
是否有可能在单个查询中删除网站表中的所有1000行,然后更新ID为1的index
字段?
json的格式为
[
{
"id": 10,
"name": "somename"
},
{
"id": 11,
"name": "another name"
} // and the rest of the 1000 rows
]
如果使用多个原始SQL语句,我也可以。
答案
假设您可以完全替换index
表中的jsonindexdocument
值:
UPDATE jsonindexdocument
SET index = (
-- using json_agg(row_to_json(sites.*)) would also work here, if you want to copy
-- all columns from the sites table into the json value
SELECT json_agg(json_build_object(
'id', id,
'name', name
))
FROM sites
)
WHERE id = 1;
例如:
CREATE TEMP TABLE sites (
id INT,
name TEXT
);
CREATE TEMP TABLE jsonindexdocument (
id INT,
index JSON
);
INSERT INTO sites
VALUES (1, 'name1')
, (2, 'name2');
INSERT INTO jsonindexdocument
VALUES (1, NULL);
UPDATE jsonindexdocument
SET index = (
SELECT json_agg(json_build_object(
'id', id,
'name', name
))
FROM sites
)
WHERE id = 1;
SELECT * FROM jsonindexdocument;
返回
+--+------------------------------------------------------------+
|id|index |
+--+------------------------------------------------------------+
|1 |[{"id" : 1, "name" : "name1"}, {"id" : 2, "name" : "name2"}]|
+--+------------------------------------------------------------+
以上是关于如何从1个表中选择许多行并将其插入另一个表中特定行的特定JSONB字段中?但是在单个原始SQL查询中的主要内容,如果未能解决你的问题,请参考以下文章
如何使用'$row'将一个数据库表中的特定值插入到另一个数据库表中?
MySQL从一个表中选择行,第二个表中有多行,并在所选行中获取多行数组