簡體   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