MySQL多SELECT查询实现求助:获取特定结构结果
解决MySQL多SELECT查询返回指定JSON格式的问题
你的原SQL会报错,因为SELECT列表中的子查询必须是单行单列的标量子查询,而你的第一个子查询返回单行两列,第二个子查询可能返回多行,违反了这个规则。要得到你期望的JSON格式结果,可以利用MySQL的JSON函数来实现:
正确SQL示例
SELECT JSON_ARRAY( -- 将query1的单行两列转为JSON对象 (SELECT JSON_OBJECT('column1', column1, 'column2', column2) FROM table1 WHERE column3='something'), -- 将query2的多行数据转为数组,再包装成指定结构的JSON对象 JSON_OBJECT('query2', (SELECT JSON_ARRAYAGG(column4) FROM table1 WHERE column4='something')) ) AS result;
关键函数说明
JSON_OBJECT(key1, val1, key2, val2):将指定的键值对组合成一个JSON对象,用来把query1的两列数据打包成单个JSON值。JSON_ARRAYAGG(column):将指定列的多行数据聚合为一个JSON数组,解决query2返回多行的问题。JSON_ARRAY(item1, item2):把query1的JSON对象和query2的JSON对象组合成一个数组,匹配你想要的结果格式。
结果示例
假设table1中符合条件的数据如下:
| column1 | column2 | column3 | column4 |
|---|---|---|---|
| foo | bar | something | val1 |
| xxx | yyy | other | something |
| zzz | www | other | something |
执行SQL后,result字段会返回:
[{"column1": "foo", "column2": "bar"}, {"query2": ["something", "something"]}]
内容的提问来源于stack exchange,提问作者andjyDev
相关产品推荐
相关产品推荐

