繁体   English   中英

将多行合并为一个MySQL Join

[英]Combine multiple rows into one MySQL Join

我想不出更好的方式来问这个问题,但是这里有:

我有2张桌子。 第一个是标签打印作业的项目表。 我们称之为pj_items列只是: job_id, part_num and qty

第二个表是一个名为PartFinishes的完成列表,只有两列: 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

此查询工作正常,并在每个部分只有一个完成时为我提供正确的结果。 问题是当零件上有两个或更多的表面处理时。

例如:零件99401326有2个饰面。 在我的pj_items表上,我有一行用于该部分,因此我可以打印一个标签。 当我使用这个查询时,它会为该部分返回2行,每行都有不同的FinishId不幸的是会导致打印2个标签。 我需要在一行上完成这两种饰面,因为我只想要一个印有两个FinishId的标签。

我有一个类似的查询返回完成为新列( f1,f2,f3 )但它仍然会在给定的示例中返回2行,其中f1在第一行中定义, f1在第二行中为null, f2在第二。

我怎么能把它变成一行?

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

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

谢谢!

编辑:

pj_items表可能有重复的条目,我需要将它们保存为单独的行。 我只需要将每个部件的所有表面处理与其各自的部分连在一起。


以下是pj_items表的示例:
pj_items表

以下是PartFinishes表中的相关信息:
PartFinishes表

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

我在结果中需要的是两行99401326是一行同时包含该行中的两个完成,同时保持99401077的两个单独的行,因为我想要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:但是如果你想保持pj_items中的行分开,你需要加入已经按PartNumber分组的PartFinishes:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM