mysql - MySQL如何将表作为子数组加入?
问题描述
所以我有两个表,我想运行一个查询,将Receipt
表和Receipt_Item
表连接起来,使Receipt_Item
表是一个子数组,如下图所示。
Receipts -
| receipt_id | phone | amount | status |
|------------|------------|--------|---------|
| 1 | 7777777777 | 5682 | Success |
| 2 | 8888888888 | 4586 | Success |
| 3 | 5555555555 | 7589 | Success |
Receipt_Item -
| receipt_id | item_id | quantity | price |
|------------|---------|----------|-------|
| 1 | 1 | 23 | 5682 |
| 1 | 2 | 30 | 5682 |
| 2 | 1 | 10 | 7589 |
| 3 | 1 | 23 | 4355 |
| 3 | 2 | 41 | 3665 |
预期产出 -
[
{
"receipt_id": 1,
"phone": "7777777777",
"amount": "5682",
"status": "Success",
"receipt_item" : [
{
"receipt_id" : 1,
"item_id" : 1,
"quantity" : 23,
"price" : 5682
},
{
"receipt_id" : 1,
"item_id" : 2,
"quantity" : 30,
"price" : 5682
}
]
},
{
"receipt_id": 2,
"phone": "8888888888",
"amount": "4586",
"status": "Success",
"receipt_item" : [
{
"receipt_id" : 2,
"item_id" : 1,
"quantity" : 10,
"price" : 7589
}
]
},
{
"receipt_id": 3,
"phone": "5555555555",
"amount": "7589",
"status": "Success",
"receipt_item" : [
{
"receipt_id" : 3,
"item_id" : 1,
"quantity" : 23,
"price" : 4355
},
{
"receipt_id" : 3,
"item_id" : 2,
"quantity" : 41,
"price" : 3665
}
]
}
]
先感谢您。
解决方案
您可以使用JSON_ARRAYAGG和JSON_OBJECT函数来完成此操作。我认为这是你需要的:
SELECT JSON_ARRAYAGG(JSON_OBJECT('receipt_id', R.receipt_id, 'phone', R.phone, 'amount', R.amount, 'status', R.status, 'receipt_Item', I.Item))
from Receipts R
LEFT JOIN
(SELECT receipt_id, JSON_ARRAYAGG(JSON_OBJECT('receipt_id', receipt_id, 'item_id', item_id, 'quantity', quantity, 'price', price)) AS Item from ReceiptItem Group BY receipt_id) I ON R.receipt_id = I.receipt_id
DBFiddler 示例可以在这里找到
推荐阅读
- javascript - iOS Safari 视频录制 Blob/FileReader 错误
- azure-active-directory - Active Directory B2B 外部 Idp 集成
- regex - 如何使用 Google 表格获取 XML 数据
- python - 使用正则表达式解析文本以进行情感分析
- python - 一次调用部分 SNMP 表检索?
- flutter - Flutter中IntrinsicHeight的替代品是什么?
- electron - PouchDB 安全问题,客户端权限逻辑
- matlab - 更改堆积条形图的颜色
- python - 将 CountVectorizer 结果设置为 pandas.DataFrame
- c# - 回发后引导开关高度自动更改