MySQL查询多个选择并合并

时间:2018-08-12 07:54:56

标签: mysql sql

我有一个称为MM(物料运动)的主表和一个名为MI(物料)的孩子的表,我进行了查询以选择具有特定条件的所有MI记录,并且MI中的每个记录都连接到主列表表称为库存,以获取物料价格。现在,我需要获取用于购买的帐户代码中的每个项目。 所以我回到po(购买顺序)表,该表也有一个称为polines表的子表,此polines表的stockID也在MI表中。

MM
MMID , Sender, NewLocation,Status 

MI
MIID, MMID, StockID, Qty1

stock
StockID, Description, UPrice

polines
PLID, POID, StockID, UPrice, AccountCode


SELECT *
FROM (mm
JOIN mi ON mi.MMID = mm.MMID)
JOIN stock ON mi.StockID = stock.StockID
WHERE mm.Status = 'Issue'

上面给了我这样的正确记录(选择了我不需要的所有列之后):

Sender  New Location  StockID  Description    UnitPrice
------  -----------   -------   ----------     ---------
James    DC1           A1       Generator g4     450

但是我需要的是:

Sender  New Location  StockID     Description      UnitPrice    account code
------  -----------   ----------  ----------       ---------    ------------
James    DC1           A1         Generator g4       450         B001,B003

基本上,帐户代码应组合或分组到stockID,但

这是polines表的样子:

StockID       Description    Account Code 
----------     -------       ----------   
   A1       Generator g4     B001
   A1       Generator g4     B003
   A2       Pipe D3          B004

我不确定在MySQL中是否可行,我可以使用PHP来做到这一点,但是我真的想提高我的MySQL技能,所以任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

使用group_concat函数

SELECT Sender,NewLocation,stock.StockID,polines.Description,UPrice, group_concat(polines .AccountCode separator ',')   
FROM mm
JOIN mi ON mi.MMID = mm.MMID
JOIN stock ON mi.StockID = stock.StockID
join polines on stock.StockID=polines.StockID
WHERE mm.Status = 'Issue'
group by Sender,NewLocation,UPrice,stock.StockID,polines.Description