0
我正在构建一个包含车辆组件的数据库。有三个表:如何在多个表上运行SQL查询
- 车辆表(车辆的清单,每一个车辆具有唯一的ID号)轮胎
- 轮胎表(列出的序列号(SN)和零件号(PN)与沿,它的安装(ID))
- 筛选表车辆(列出的序列号(SN),用于与它的安装上(ID))
我会车辆沿着过滤器和部件号(PN)喜欢创建一个Access SQL查询,它为所有的过滤器提供序列号和零件号安装在特定车辆上的轮胎(假设我们正在搜索车辆ID为5的本田思域)。我创建了下面的代码,但它返回了所有结果的笛卡尔乘积。每辆车上都安装了两个过滤器和两个轮胎,以便在结果合并和复制时返回以下结果。
- 轮胎1(PN and 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;
谢谢!
你的数据不是很标准化的,因为轮胎和filgers有相同的数据(至少在你的例子中,最好只有一个表,并定义组件是“轮胎”还是“过滤器”,这样你就不必从两者中进行选择)另外,如果你以后决定添加“带”,你不必写更多的查询,数据将驱除额外的组件。 – xQbert 2013-03-12 00:13:20
要回答你的问题,尽管它可以使用当前模式来完成,但是我们必须使得assu每辆车总是有2个轮胎和2个过滤器,并且过滤器的内径较低与同一辆车的轮胎内径较低有关。如果随着时间的推移将要扩展数据库,这将变得越来越难以维护。 – xQbert 2013-03-12 00:20:37
为什么你需要他们作为列?它不像xQbert所说的那样是可扩展的。只要选择它们作为组合结果集的行。 – peterm 2013-03-12 00:23:27