我在MySQL数据库(storeskus)中有2个表。第一个是FBM_Orders
,第二个是IM_INV
。
我正在尝试查询
SELECT `FBM_Orders`.`order-id`,`FBM_Orders`.`order-item-id`,`FBM_Orders`.`purchase-date`,
`FBM_Orders`.`promise-date`,`FBM_Orders`.`buyer-name`,`FBM_Orders`.`sku`,
`FBM_Orders`.`product-name`,`FBM_Orders`.`quantity-purchased`,
`FBM_Orders`.`recipient-name`,`IM_INV`.`LOC_ID`,`IM_INV`.`QTY_ON_HND`
FROM `FBM_Orders`
LEFT JOIN `IM_INV` ON `FBM_Orders`.`sku` = `IM_INV`.`ITEM_NO`
WHERE `FBM_Orders`.`quantity-to-ship` > 0
ORDER BY `FBM_Orders`.`purchase-date`, `IM_INV`.`LOC_ID` ASC;
因为IM_INV
表格包含两部分主键:ITEM_NO
& LOC_ID
,对于每个ITEM_NO
,我为4个地点(QTY_ON_HND
)中的每一个LOC_ID
获得4行。
我对SQL很陌生,所以我很高兴能够做到这一点,但我怎样才能使每个ITEM_NO
的结果为一行,但每个{{1}都有一列1}}及其LOC_ID
?
示例:
我目前的结果是
QTY_ON_HND
如何将其更改为
FBM_Order.sku FBM_Order.quantity-purchased IM_INV.LOC_ID QTY_ON_HND
'SCHO645256' 1 AF 2
'SCHO645256' 1 LO 2
'SCHO645256' 1 S 3
'SCHO645256' 1 SL 1
谢谢!
答案 0 :(得分:2)
您可以按照自己的方式加载它并在应用程序中对其进行处理,但如果您真的想在MySQL内部进行处理,请尝试使用GROUP CONCAT和JSON,如下所示:
SELECT
GROUP_CONCAT(JSON_OBJECT(
'LOC_ID', IM_INV.LOC_ID,
'QTY_ON_HND', QTY_ON_HND
))
{another fields}
FROM `FBM_Orders`
LEFT JOIN `IM_INV` ON `FBM_Orders`.`sku` = `IM_INV`.`ITEM_NO`
WHERE `FBM_Orders`.`quantity-to-ship` > 0
GROUP BY `FBM_Orders`.`order-id`;
注意:JSON仅适用于MySQL 5.7+,可能会减慢您的查询速度。您仍然需要将数据转换为应用程序内的数组。所以它在你的应用程序中完成了一半,在数据库中完成了一半。