我正在构建一个包含车辆组件的数据库。共有三个表:
- 车辆表(每辆车都有唯一 ID 号的车辆列表)
- 轮胎表(列出轮胎的序列号 (SN) 和零件号 (PN) 以及安装轮胎的车辆 (ID))
- 过滤器表(列出过滤器的序列号 (SN) 和部件号 (PN) 以及安装它的车辆 (ID))
我想创建一个 Access SQL 查询,它提取安装在特定车辆上的所有过滤器和轮胎的序列号和零件号(假设我们正在搜索车辆 ID 为 5 的本田思域)。我创建了以下代码,但它返回所有结果的笛卡尔积。每辆车上安装了两个过滤器和两个轮胎,因此它返回以下结果,其中结果被组合和复制。
- 轮胎 1(PN 和 SN)| 过滤器 1(PN 和 SN)
- 轮胎 1(PN 和 SN)| 过滤器 2(PN 和 SN)
- 轮胎 2(PN 和 SN)| 过滤器 1(PN 和 SN)
- 轮胎 2(PN 和 SN)| 过滤器 2(PN 和 SN)
无论如何我可以创建一个返回的查询:
- 轮胎 1(PN 和 SN)
- 轮胎 2(PN 和 SN)
- 过滤器 1(PN 和 SN)
- 过滤器 2(PN 和 SN)
我的代码如下:
SELECT DISTINCT Tires.SN, Tires.PN, Tires.ID, Filters.ID, Filters.PN, Filters.SN,
Vehicle.ID
FROM (Vehicle
INNER JOIN Filters ON Vehicle.[ID] = Filters.[ID])
INNER JOIN Tires ON Vehicle.[ID] = Tires.[ID]
WHERE Vehicle.[ID] = 5;