【问题标题】:MS Access SQL Product Combination ExportMS Access SQL 产品组合导出
【发布时间】: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 中。

标签: sql ms-access


【解决方案1】:

在 Access SQL 中更容易:

产品FKID | VariantTypeFKID |变量值FKID |附加费

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多