json_agg内部与json_build_对象的并集
如何以某种优雅的方式从另一个表中合并数据?这里只是一个简单的例子,但可能有一些联接,可能是来自不同表的相同列名等json_agg内部与json_build_对象的并集,json,postgresql,Json,Postgresql,如何以某种优雅的方式从另一个表中合并数据?这里只是一个简单的例子,但可能有一些联接,可能是来自不同表的相同列名等 CREATE TABLE test1 ( id integer, value text); INSERT INTO test1 VALUES (1, 'xyz'), (2, 'xxy'); CREATE TABLE test2 ( id integer, value text); INSERT INTO test2 VALUES (3, 'yyy
CREATE TABLE test1 (
id integer, value text);
INSERT INTO test1
VALUES (1, 'xyz'), (2, 'xxy');
CREATE TABLE test2 (
id integer, value text);
INSERT INTO test2
VALUES (3, 'yyy'), (4, 'yxy');
类似这样的内容会导致语法错误:
SELECT json_agg (json_build_object(
'ID', t1.id,
'someText', t1.value )) AS jbo
FROM test1 t1
不要将带有union的子查询放在
json_agg()
中,而是放在FROM
语句中:
SELECT
json_agg(
SELECT
json_build_object('ID', t1.id, 'someText', t1.value)
FROM test1 t1
UNION ALL
SELECT
json_build_object('ID', t2.id, 'someText', t2.value)
FROM test2 t2
) AS jbo
()期望的输出是什么?你在说什么连接?我发现现在的问题是,在结果中创建了一个名为“json_build_object”的数组,如何消除它?好的,管理它,选择的名称应该与整个子查询相同,所以例如选择json_build_object('ID',t1.ID',someText',t1.value)作为jbo@sh4rkyy正确的,我们希望将json对象聚合到一个数组中,而不是整个(单列)行中。固定的。
SELECT json_agg(jbo.val)
FROM (
SELECT json_build_object('ID', t1.id, 'someText', t1.value)
FROM test1 t1
UNION ALL
SELECT json_build_object('ID', t2.id, 'someText', t2.value)
FROM test2 t2
) AS jbo(val)