[英]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表的示例:
以下是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.