首页 > 解决方案 > 如何从 SQLITE UNION 查询中获取单个 JSON 对象?

问题描述

我可以从 SQLITE JSON1 扩展获得 UNION 结果,但会产生两个 JSON 对象,即两个“结果”对象。如何从 SQLITE 查询中获取单个 JSON 对象?

询问:

SELECT json_object('Result', 
    json_array(
        json_object('ID',
                    json_group_array(id),
                    'Data',
                    json_group_array(data)
    )
) FROM table1

UNION

SELECT json_object('Result', 
    json_array(
        json_object('timestamp',
                    json_group_array(ts),
                    'name',
                    json_group_array(name)
    )
) FROM table2;

我得到什么:

{
  "Result":
  [{
      "id":[1,2,3],
      "data":[10,20,30]
  }]
}
{
  "Result":
  [{
      "timestamp":[1200,1230,1300,1330,1400],
      "name":[Ada,Bella,Candy,Dolly,Ella]
  }]
}

我的愿望:

{
  "Result":
  [{
      "id":[1,2,3],
      "data":[10,20,30],
      "timestamp":[1200,1230,1300,1330,1400],
      "name":[Ada,Bella,Candy,Dolly,Ella]
  }]
}

标签: jsonsqliteunion

解决方案


您可以使用子查询来实现这一点:

SELECT
    JSON_OBJECT('Result',
        JSON_ARRAY(
            JSON_OBJECT('id',
                        (SELECT JSON_GROUP_ARRAY(id) FROM table1), 
                        'data',
                        (SELECT JSON_GROUP_ARRAY(data) FROM table1),
                        'timestamp',
                        (SELECT JSON_GROUP_ARRAY(ts) FROM table2),
                        'name',
                        (SELECT JSON_GROUP_ARRAY(name) FROM table2)
            )
        )
    );

推荐阅读