0

我正在构建一个包含车辆组件的数据库。共有三个表:

  • 车辆表(每辆车都有唯一 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;
4

1 回答 1

0

如果您真的只需要 Vehicle.ID 的单个值,那么您可以使用UNION如下查询:

SELECT 'Tire',Tires.SN, Tires.PN 
FROM Tires
WHERE Vehicle.[ID]=5
UNION 
SELECT 'Filter',Filters.PN, Filters.SN
FROM Filters
WHERE Vehicle.[ID]=5
ORDER BY 1;
于 2013-03-12T00:25:40.067 回答