Return 连接行的列作为数组而不是对象
Return column of joined rows as array instead of object
我遇到了一个有点难以解释的问题。
我有两个数据库表:
ID
FRUIT
1
Apple
2
Orange
FRUIT_ID
COLOR
1
Red
1
Green
2
Orange
背后的想法:一个水果可以有多种颜色。
要获得所有水果的所有颜色,我必须加入它们:
SELECT a.*, b.color
FROM 水果 a, FruitColor b
其中 a.id = b.fruit_id
ID
FRUIT
COLOR
1
Apple
Red
1
Apple
Green
2
Orange
Orange
JSON 看起来像这样:
[
{
"ID": "1",
"FRUIT": "Apple",
"COLOR": "Red"
},
{
"ID": "1",
"FRUIT": "Apple",
"COLOR": "GREEN"
},
{
"ID": "2",
"FRUIT": "Orange",
"COLOR": "Orange"
}
]
问题来了
我实际上不想 return 每个额外颜色的对象,我需要将它们放在这样的数组中:
[
{
"ID": "1",
"FRUIT": "Apple",
"COLOR": [
"Red",
"Green"
]
},
{
"ID": "2",
"FRUIT": "Orange",
"COLOR": "Orange"
}
]
我怎样才能做到这一点?
如果我必须更改数据库结构或查询并不重要,对此的任何解决方案都会有所帮助。
你可以使用JSON_ARRAYAGG
函数两次,以便第一次封装颜色,第二次应用的对象如
SELECT JSON_ARRAYAGG(js) AS Result
FROM (SELECT JSON_OBJECT('id',
f.id,
'fruit',
f.fruit,
'state',
JSON_ARRAYAGG(fc.color)) AS js
FROM Fruit AS f
JOIN FruitColor AS fc
ON f.id = fc.fruit_id
GROUP BY f.id, f.fruit) j
我遇到了一个有点难以解释的问题。
我有两个数据库表:
ID | FRUIT |
---|---|
1 | Apple |
2 | Orange |
FRUIT_ID | COLOR |
---|---|
1 | Red |
1 | Green |
2 | Orange |
背后的想法:一个水果可以有多种颜色。 要获得所有水果的所有颜色,我必须加入它们:
SELECT a.*, b.color FROM 水果 a, FruitColor b 其中 a.id = b.fruit_id
ID | FRUIT | COLOR |
---|---|---|
1 | Apple | Red |
1 | Apple | Green |
2 | Orange | Orange |
JSON 看起来像这样:
[
{
"ID": "1",
"FRUIT": "Apple",
"COLOR": "Red"
},
{
"ID": "1",
"FRUIT": "Apple",
"COLOR": "GREEN"
},
{
"ID": "2",
"FRUIT": "Orange",
"COLOR": "Orange"
}
]
问题来了 我实际上不想 return 每个额外颜色的对象,我需要将它们放在这样的数组中:
[
{
"ID": "1",
"FRUIT": "Apple",
"COLOR": [
"Red",
"Green"
]
},
{
"ID": "2",
"FRUIT": "Orange",
"COLOR": "Orange"
}
]
我怎样才能做到这一点? 如果我必须更改数据库结构或查询并不重要,对此的任何解决方案都会有所帮助。
你可以使用JSON_ARRAYAGG
函数两次,以便第一次封装颜色,第二次应用的对象如
SELECT JSON_ARRAYAGG(js) AS Result
FROM (SELECT JSON_OBJECT('id',
f.id,
'fruit',
f.fruit,
'state',
JSON_ARRAYAGG(fc.color)) AS js
FROM Fruit AS f
JOIN FruitColor AS fc
ON f.id = fc.fruit_id
GROUP BY f.id, f.fruit) j