产品表:
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 相同,因为它在产品表中与 ProductID 775308 具有相同的名称、制造商和部件号,尽管 ProductID 不同。
我需要使用 ProductID 和产品表中的名称对匹配的 SKU 表中的相似 SKU 进行分组。
最佳答案
你可以这样做:
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 |
第一个联合查询将从产品表和 SKU 表中给出匹配的产品 ID。第二个联合查询将在同一个表中给出匹配的产品名称,同时将它们与 skus 表进行匹配。
关于php - MYSQL SELECT Group By 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33543327/