gpt4 book ai didi

表 "Triangular Relation"的 SQL 查询

转载 作者:行者123 更新时间:2023-12-04 08:27:20 25 4
gpt4 key购买 nike

我很难在 SQL 中得到一个 - 看似简单 - 的权利。我正在使用 MS Access,但我想这并不重要。
我的数据结构如下所示:
enter image description here
所以tblA有“产品”,tblB “组件”和tblC “模块”。这显然只是一个例子。tblA (“产品”)与 tblB 有 m:n 关系(“组件”),即一个产品由一些组件组成,组件可以属于许多产品。 tblB ("组件") 与 tblC 有 m:n 关系(“模块”),即一个组件由模块组成,模块可以属于许多组件。现在的转折是,我在 tblA 之间也有 m:n 关系。和 tblC ,即产品和模块的映射。这是因为组件的“配置”可能会根据其所针对的产品而有所不同。因此,对于“产品 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".关系是
enter image description here
所以基本上我想要一个包含 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;
我明白了
enter image description here
这是可以理解的,但不是我想要的。我尝试先加入 tblAtblB并将其与具有 tblB 连接的 LEFT JOIN(或 RIGHT JOIN)结合起来和 tblC但这会产生“不支持的连接操作”错误。
关于如何解决这个问题的任何想法?

最佳答案

查看您的关系,您没有使用主键来建立一对多关系,而是使用数据字段。
在这种情况下,此查询应该适合您:

SELECT tblA.Product, mapAC.Module, MapAB.Component
FROM (tblA LEFT JOIN mapAC ON tblA.Product = mapAC.Product) LEFT JOIN MapAB ON tblA.Product = MapAB.Product;
在这种情况下,所有其他表格都只是提供信息,因为您已经在表格 MapAB 中获得了可用数据。和 MapAC .
我建议在你的关系中使用主键。
更新:
您的查询可以通过三种途径获取您需要的数据:
  • tblA -> mapAB + mapAC
  • tblA -> mapAB -> tblB -> mapBC -> tblC
  • tblA -> mapAC -> tblC -> mapBC -> tblB

  • 根据您要遵循的查询的数据路径,您的查询看起来会有所不同。
    路线2查询:
    SELECT tblA.Product, MapAB.Component, mapBC.Module
    FROM (((tblA LEFT JOIN MapAB ON tblA.Product = MapAB.Product) LEFT JOIN tblB ON MapAB.Component = tblB.Component) LEFT JOIN mapBC ON tblB.Component = mapBC.Component) LEFT JOIN tblC ON mapBC.Module = tblC.Module;
    路线 3 查询:
    SELECT tblA.Product, mapAC.Module, mapBC.Component
    FROM (((tblA LEFT JOIN mapAC ON tblA.Product = mapAC.Product) LEFT JOIN tblC ON mapAC.Module = tblC.Module) LEFT JOIN mapBC ON tblC.Module = mapBC.Module) LEFT JOIN tblB ON mapBC.Component = tblB.Component;

    关于表 "Triangular Relation"的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65198048/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com