2015-11-05 123 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表匹配。