所以我在SQL中有点生疏,在这里真的需要一些帮助 - 非常高兴。
我手边有一个基于MS Access的在线商店系统,我需要导出所有可能的产品变体。
我有一张桌子" VariantTypes"其中包含所有必需的信息。 它看起来像这样:
ProductFKID | VariantTypeFKID | VariantValueFKID | Surcharge
一种产品的数据如下所示:
2 | 3 | 12 | 0,00 €
2 | 3 | 13 | 39,00 €
2 | 3 | 14 | 39,00 €
2 | 134 | 556 | 0,00 €
2 | 134 | 557 | 90,00 €
2 | 134 | 558 | 90,00 €
现在对于新导入我需要每个可能的变体组合,它应该如下所示:
2 | 3 | 12 | 0,00 € | 134 | 556 | 0,00 €
2 | 3 | 12 | 0,00 € | 134 | 557 | 90,00 €
2 | 3 | 12 | 0,00 € | 134 | 558 | 90,00 €
2 | 3 | 13 | 39,00 € | 134 | 556 | 0,00 €
2 | 3 | 13 | 39,00 € | 134 | 557 | 90,00 €
2 | 3 | 13 | 39,00 € | 134 | 558 | 90,00 €
2 | 3 | 14 | 39,00 € | 134 | 556 | 0,00 €
2 | 3 | 14 | 39,00 € | 134 | 557 | 90,00 €
2 | 3 | 14 | 39,00 € | 134 | 558 | 90,00 €
当然,如果我有一种产品的3种变体类型,它应该以相同的方式工作。最好的例子是:
颜色为黑色,白色,红色且尺寸为S,M,L的产品 我需要:
黑色 - S |黑色 - M |黑色 - L |白 - S |白色 - M |白色 - L |红 - S | ...
我确信有一种简单的方法可以解决这个问题,因为我很久以前就在学校里学到了这一点。我只是不记得如何。
提前感谢您的帮助!
电贺, KaptainEaglu
更新
我设法创建以下语句来创建笛卡尔积:
SELECT v1.ProductID,v1.Name,v1.Value,v1.Surcharge,v2.Name,v2.Value,v2.Surcharge
FROM [smartstore]。[dbo]。[smarstorevariants] v1
CROSS JOIN [smartstore]。[dbo]。[smarstorevariants] v2
WHERE v1.ProductID = v2.ProductID AND v1.Name!= v2.Name
ORDER BY v1.ProductID desc
但结果我得不到9个组合,但结果是18。 例如:Black-S,Black-M,...... 和S-Black,S-White,......
我知道,从技术上讲,它们是不同的组合,但对于我的商店出口,它们是双重组合。
关于如何解决这个问题的任何想法?
答案 0 :(得分:0)
在Access SQL中更容易:
ProductFKID | VariantTypeFKID | VariantValueFKID |附加费
SELECT DISTINCT
v1.ProductFKID,
v1.VariantTypeFKID, v1.VariantValueFKID, v1.Surcharge,
v2.VariantTypeFKID, v2.VariantValueFKID, v2.Surcharge
FROM
VariantTypes As v1,
VariantTypes As v2
WHERE
v1.ProductFKID = v2.ProductFKID
AND
v1.VariantTypeFKID <> v2.VariantTypeFKID
ORDER BY
v1.ProductFKID Desc