2012-01-12 100 views
3

我想不出有更好的方式来问这个问题,但是这里有:将多行组合成一个MySQL加入

我有2个表。第一个是用于标签打印作业的项目表。我们叫它pj_items的列是简单的:job_id, part_num and qty

第二个表是部分称为PartFinishes只有2列完成的列表:PartNumber and FinishId

当我想要检索标签打印机我的信息用途:
select pj_items.part_num, pj_items.qty, PartFinishes.FinishId from pj_items
join PartFinishes on PartFinishes.PartNumber = pj_items.part_num
where job_id = 1

此查询工作正常,并给了我正确的结果时,每个部件h只有一个完成。问题是当零件有两个或更多的饰面时。

例如:零件99401326有2个完成。在我的pj_items表格中,我有一行可以打印一个标签。当我使用这个查询时,它返回2行,每个都有不同的FinishId。不幸的是,这会导致打印2个标签。因为我只想要一个标签与FinishId的礼物一起打印,所以我需要将这两个表面完成。

我有这返回的结束作为新列(f1,f2,f3)类似的查询,但它仍然会在给定的例子返回2行与第一行中的定义f1f1作为第二行空,f2中被定义第二。

我怎样才能把它变成一行?

希望这是有道理的,任何人有任何建议?

如果您需要更多信息,请告诉我。

谢谢!

编辑:

pj_items表可能有重复的条目,我需要保护这些作为单独的行。我只需要为其各个部分的每一部分都完成一行。


这里是pj_items表的一个例子:
pj_items table

下面是从PartFinishes表中的相关信息:
PartFinishes table

这里是使用原始的结果查询:
results

我在结果中需要的是99401326的两行是同一行中的两个完成,同时保留了99401077的2个独立行,因为我需要这两行标记。

回答

2

您可以使用GROUP_CONCAT将给定零件的所有完成ID组合到一列中。

SELECT pj_items.part_num, 
     pj_items.qty, 
     GROUP_CONCAT(PartFinishes.FinishId) as FinishIds 
FROM pj_items 
JOIN PartFinishes 
    ON PartFinishes.PartNumber = pj_items.part_num 
WHERE job_id = 1 
GROUP BY PartFinishes.PartNumber 

@comment: 但是,如果你想保持行分开,你需要加入已经按号码分组PartFinishes pj_items:

SELECT pj_items.part_num, 
    pj_items.qty, 
    FinishesGrouped.FinishIds 
FROM pj_items 
JOIN 
    (SELECT PartNumber, GROUP_CONCAT(FinishId) as FinishIds 
    FROM PartFinishes 
    GROUP BY PartNumber) FinishesGrouped 
ON 
    pj_items.part_num = FinishesGrouped.PartNumber 
+0

工程。然后问题是如果我想打印一个部分的多个标签,我会在同一部分的pj_items表中有2或3行。这些行在FinishIds列中被多次合并为一个,并且具有相同的完成次数。我应该为我的问题添加更多细节。尽管谢谢你的回答! – 2012-01-12 16:09:48

+0

非常好!这是完美的。非常感谢! – 2012-01-12 17:48:42