【发布时间】:2015-05-09 14:59:32
【问题描述】:
所以我对 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
更新:
我设法创建了以下语句来创建笛卡尔积:
选择 v1.ProductID、v1.Name、v1.Value、v1.Surcharge、v2.Name、v2.Value、v2.Surcharge
FROM [smartstore].[dbo].[smarstorevariants] v1
交叉连接 [smartstore].[dbo].[smarstorevariants] v2
在哪里 v1.ProductID = v2.ProductID AND v1.Name != v2.Name
ORDER BY v1.ProductID 描述
但结果我没有得到 9 个组合,而是 18 个。 例如:黑色-S、黑色-M、... 和 S-Black、S-White、...
我知道,从技术上讲,它们是不同的组合,但对于我的商店出口来说,它们是双重组合。
关于如何解决这个问题的任何想法?
【问题讨论】:
-
您要的是笛卡尔积;使用 CROSS JOIN 运算符实现,没有 ON 子句。
-
但是 ms-access 不支持交叉连接,afaik?
-
第一次谷歌搜索“ms-access sql cross join”:stackoverflow.com/questions/1231676/…
-
我刚刚从 ms-access 创建了一个 odbc-export 并创建了一个 MS-SQL Server 表。
-
当 SQL Server 可用时,它始终是比 MS-Access 更好的数据存储解决方案选择,即使前端可能保留在 MS-Access 中。