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)