2015-11-05 204 views
3

產品表:MYSQL選擇Group by語句

ProductID | Manufacturer | Part No  | Name 
----------------------------------------------------------------- 
770593 | GBC   | EB100000 | GBC (30 inch) ID Neck Chain - 1 x Pack of 100 Neck Chains 
775308 | Elba   | 100080883 | Elba Vision (A5) Ring Binder 
801982 | Elba   | 100080883 | Elba Vision (A5) Ring Binder 

匹配的SKU表:

SupplierSKUID | ProductID 
--------------|------------------- 
Sku1   | 770593 
Sku2   | 770593 
Sku3   | 775308 
Sku4   | 775308 
Sku5   | 801982 

結果:

SupplierSKUID | ProductID 
--------------|------------------- 
Sku1   | Sku2 
Sku2   | Sku1 
Sku3   | Sku4 
Sku3   | Sku5 
Sku4   | Sku3 
Sku4   | Sku5 
Sku5   | Sku3 
Sku5   | Sku4 

從上面的例子可以看出,SKU1和SKU2是相同。 Sku3,Sku4和Sku5也是一樣的。 Sku5與Sku3和Sku4相同,因爲它與產品ID 775308中的產品表具有相同的名稱,製造商和部件號,即使ProductID不同。

我需要使用ProductID以及產品表中的名稱在匹配的skus表中對類似skus進行分組。

+1

那麼您發佈的樣本數據的期望結果是什麼? –

+0

@MahmoudGamal我不知道,但我需要創建另一個表,將保存類似skus的數據。因此,例如,如果Sku1和Sku2相同,我需要將表中的數據保存在Sku1與Sku2相同,並且Sku2與Sku1相同。我不確定這樣做的最佳方式是什麼,我真的很感謝一些幫助。 – user4676307

+0

您能否在您提供的示例數據上添加一個表格,其中包含查詢所需的準確輸出? – Anders

回答

2

你可以這樣做:

SELECT 
    Name, 
    GROUP_CONCAT(ProductId) AS LinkedProducts, 
    GROUP_CONCAT(SupplierSKUID) AS LinkedSKUS 
FROM 
(
    SELECT 
     s.ProductId, 
     p.Name, 
     s.SupplierSKUID 
    FROM Products AS p 
    INNER JOIN SKus AS s ON p.ProductID = s.ProductID 
    UNION 
    SELECT 
     s.ProductId, 
     p1.Name AS Name1, 
     s.SupplierSKUID 
    FROM Products AS p1 
    INNER JOIN Products AS p2 ON p1.Name = p2.Name 
           AND p1.ProductID <> p2.ProductID 
    INNER JOIN SKus AS s ON p1.ProductID = s.ProductID 
) AS t 
GROUP BY Name; 

這會給你的產品名稱,所有的鏈接的SKU和所有鏈接的產品ID在這兩個表:

|              Name |  LinkedProducts |  LinkedSKUS | 
|-----------------------------------------------------------|----------------------|----------------| 
|        Elba Vision (A5) Ring Binder | 801982,775308,775308 | Sku5,Sku4,Sku3 | 
| GBC (30 inch) ID Neck Chain - 1 x Pack of 100 Neck Chains |  770593,770593 |  Sku1,Sku2 | 

第一個聯合查詢會給匹配的產品i從產品表和skus表ds。第二個聯合查詢將在同一個表中給出匹配的產品名稱,同時將它們與skus表匹配。