【发布时间】:2020-12-08 11:27:37
【问题描述】:
我很难在 SQL 中找到一个看似简单的方法。我正在使用 MS Access,但我想这并不重要。 我的数据结构如下所示:
所以tblA 有“产品”,tblB 有“组件”,tblC 有“模块”。这显然只是一个例子。
tblA(“产品”)与tblB(“组件”)有 m:n 关系,即一个产品由一些组件组成,组件可以属于许多产品。 tblB ("Component") 与 tblC ("Modules") 有 m:n 关系,即一个组件由模块组成,而模块可以属于许多组件。现在的转折是,我在tblA 和tblC 之间也有一个 m:n 关系,即产品和模块的映射。这是因为组件的“配置”可能会根据其所针对的产品而有所不同。因此,对于“产品 1”,“组件 2”需要由“模块 1”和“模块 2”组成,而对于“产品 2”,“组件 2”只是“模块 2”。
我想要一个这样的结果
|Product|Component|Module|
|-------|---------|------|
|Prod1 |C1 | |
|Prod1 |C2 | |
|Prod1 |C2 |M1 |
|Prod1 |C2 |M2 |
|Prod2 |C2 | |
|Prod2 |C2 |M2 |
|Prod2 |C3 | |
|Prod2 |C3 |M3 |
tblA 中有“Prod1”和“Prod2”; tblB 中的“C1”、“C2”、“C3”和 tblC 中的“M1”、“M2”、“M3”。关系是
所以本质上我想要一个包含 Product、Component、Module 的表格,其中包含 Product+ 的所有组合
现在使用 SQL 查询
SELECT tblA.Product,
tblB.Component,
tblC.Module
FROM tblC
INNER JOIN ((tblA
INNER JOIN (tblB
INNER JOIN mapAB ON tblB.[Component] = mapAB.[Component]) ON tblA.[Product] = mapAB.[Product])
INNER JOIN mapAC ON tblA.Product = mapAC.Product) ON tblC.Module = mapAC.Module;
我明白了
这是可以理解的,但不是我想要的。我尝试先进行tblA 和tblB 的连接,然后将其与左连接(或右连接)与tblB 和tblC 的连接结合起来,但这会产生“不支持的连接操作”错误。
关于如何解决这个问题的任何想法?
【问题讨论】: