如何在多个表上运行SQL查询

时间:2013-03-12 00:08:53

标签: sql

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

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

1 个答案:

答案 0 :(得分: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;